c#中的c abstract 属性和visual的区别

C#中&virtual虚拟类,abstract抽象类,用法及区别
virtual虚拟方法是用来修改
方法,属性,索引indexer,然后通过继承类的方法前缀override来修改,切记不能修饰类。
class MyBaseClass&
// virtual auto-implemented property. Overrides can only&
// provide specialized behavior if they implement get and set accessors.&
public virtual string Name&{&get;set;}
// ordinary virtual property with backing field&
private int&
public virtual int Number&
get&{&return}&
set{&num =&}&
class MyDerivedClass : MyBaseClass&
private string&
// Override auto-implemented property with ordinary property&
// to provide specialized accessor behavior.&
public override string Name&
get&{&return&}&
if&(value != String.Empty)
name = "Unknown";
abstract虚拟方法可以修饰类,方法,属性,索引子indexer,然后通过继承类的方法override来重写修改,如果一个方法被abstract修饰,那么该方法所在的类必须被abstract修饰。
abstract class BaseClass
// Abstract class&
protected int _x = 100;&
protected int _y = 150;&
public abstract void AbstractMethod();
// Abstract method&
public abstract int X
public abstract int Y
&class DerivedClass : BaseClass
public override void AbstractMethod()&
public override int X
// overriding property&
return _x + 10;&
public override int Y
// overriding property&
return _y + 10;
static void Main()&
&DerivedClass o = new DerivedClass();&
&o.AbstractMethod();&
&Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
// Output: x = 111, y = 161
virtual抽象方法和abstract虚拟方法的区别
virtual抽象方法可以存在于抽象类或非抽象类,而abstract只能存在抽象类,如果一方法被抽象abstract化,那么类的前面也必须加上abstract.
virtual抽象方法可以写方法,意思是可以定义,而abstract只能抽象方法,里面不能定义内容,也就是说函数后面没有大括号
类中的virtual虚拟方法不一定需要再继承类中重写,而abstract类里的所有abstract抽象方法必须全部在继承类中重写,我们可以通过上面的两个例子看出。所以在实际操作中,如果有个类需要全部重写定义,那么用abstract,如果有个类只需部分继承,那么我们使用virtual虚拟方法.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。深入理解C# abstract和virtual关键字
字体:[ ] 类型:转载 时间:
深入理解C# abstract和virtual关键字,学习c#的朋友可以参考下。
代码如下: class A { public virtual void Func() // 注意virtual,表明这是一个虚拟函数 { Console.WriteLine("Func In A"); } } class B : A // 注意B是从A类继承,所以A是父类,B是子类 { public override void Func() // 注意override ,表明重新实现了虚函数 { Console.WriteLine("Func In B"); } } class C : B // 注意C是从B类继承,所以B是父类,C是子类 { } class D : A // 注意D是从A类继承,所以A是父类,D是子类 { public new void Func() // 注意new ,表明覆盖父类里的同名类,而不是重新实现 { Console.WriteLine("Func In D"); } } class Program { static void Main(string[] args) { A // 定义一个a这个A类的对象.这个A就是a的申明类 A // 定义一个b这个A类的对象.这个A就是b的申明类 A // 定义一个c这个A类的对象.这个A就是c的申明类 A // 定义一个d这个A类的对象.这个A就是d的申明类 a = new A(); // 实例化a对象,A是a的实例类 b = new B(); // 实例化b对象,B是b的实例类 c = new C(); // 实例化c对象,C是c的实例类 d = new D(); // 实例化d对象,D是d的实例类 a.Func(); // 执行a.Func:1.先检查申明类A 2.检查到是虚拟方法 3.转去检查实例类A,就为本身 4.执行实例类A中的方法 5.输出结果 Func In A b.Func(); // 执行b.Func:1.先检查申明类A 2.检查到是虚拟方法 3.转去检查实例类B,有重载的 4.执行实例类B中的方法 5.输出结果 Func In B c.Func(); // 执行c.Func:1.先检查申明类A 2.检查到是虚拟方法 3.转去检查实例类C,无重载的 4.转去检查类C的父类B,有重载的 5.执行父类B中的Func方法 5.输出结果 Func In B d.Func(); // 执行d.Func:1.先检查申明类A 2.检查到是虚拟方法 3.转去检查实例类D,无重载的(这个地方要注意了,虽然D里有实现Func(),但没有使用override关键字,所以不会被认为是重载) 4.转去检查类D的父类A,就为本身 5.执行父类A中的Func方法 5.输出结果 Func In A D d1 = new D(); d1.Func(); // 执行D类里的Func(),输出结果 Func In D Console.ReadLine(); } }
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具C#中Abstract与Virtual的区别和联系_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C#中Abstract与Virtual的区别和联系
上传于||文档简介
&&c​#​ ​A​b​s​t​r​a​c​t​ ​V​i​r​t​u​a​l
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢asp.net中virtual和abstract的区别分析-asp.net编程【1】
&&&&【提要】本篇《asp.net中virtual和abstract的区别分析-asp.net编程【1】》特别为需要编程学习的朋友收集整理的,仅供参考。内容如下:
&&&&本文实例分析了asp.net中virtual和abstract的区别,分享给大家供大家参考。具体分析如下:&&&&一、Virtual方法(虚方法)&&&&virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:&&&&情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。&&&&情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。&&&&当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在类的继承中非常常用,用来提供类方法的多态性支持。&&&&二、Abstract方法(抽象方法)&&&&abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。&&&&抽象方法声明使用,是必须被派生类覆写的方法,抽象类就是用来被继承的;可以看成是没有实现体的虚方法;如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法;抽象类不能有实体的。&&&&三、多态&&&&C#中多态的实现分为了两种,一种是编译时多态,一种是运行时多态&&&&|- 编译时多态 通过一个类中多个方法的重载来实现的多态,系统在编译的时候,根据传递的参数确定具体调用哪个重载的方法;&&&&|- 运行时多态 通过virtual函数(虚函数)、抽象方法实现的多态,派生类去override虚函数或抽象方法,从而实现运行时多态.&&&&四、abstract的用法&&&&复制代码 代码如下:using S&&&&using System.Collections.G&&&&using System.T&&&&namespace ConsoleApplication3&&&&{&&&&public abstract class Book&&&&{&&&&//抽象方法,不含主体,抽象方法所在类必须为抽象类,派生类必须实现该方法&&&&public abstract void Introduce();&&&&}&&&&public class JavaBook : Book&&&&{&&&&//实现抽象方法,必须实现,注意!必须添加override关键字&&&&public override void Introduce()&&&&{&&&&Console.WriteLine("I'm Java");&&&&}&&&&}&&&&public class test&&&&{&&&&public test()&&&&{&&&&JavaBook javaBook = new JavaBook();&&&&javaBook.Introduce();
//将调用JavaBook中Introduce()&&&&Book book = new JavaBook();&&&&book.Introduce();
//将调用JavaBook中Introduce()&&&&}&&&&public static void Main()&&&&{&&&&test t = new test();&&&&}&&&&}&&&&}&&&&五、virtual的用法以及override的用法&&&&复制代码 代码如下:using S&&&&using System.Collections.G&&&&using System.T&&&&namespace ConsoleApplication2&&&&{&&&&public abstract class Book&&&&{&&&&public virtual void Introduce()&&&&{&&&&Console.WriteLine("I'm book");&&&&}&&&&public virtual void SayHi()&&&&{&&&&Console.WriteLine("Hi, I'm book");&&&&}&&&&}&&&&public class JavaBook : Book&&&&{&&&&public override void Introduce()&&&&{&&&&Console.WriteLine("I'm Java");&&&&}&&&&//注意,此方法没有override父类的方法&&&&public void SayHi()&&&&{&&&&Console.WriteLine("Hi, I'm Java");&&&&}&&&&}&&&&public class test&&&&{&&&&public test()&&&&{&&&&JavaBook javaBook = new JavaBook();&&&&Book book = new JavaBook();&&&&javaBook.Introduce();
//将调用JavaBook中Introduce()&&&&book.Introduce();
//将调用JavaBook中Introdu
特别声明:1674人阅读
看到一边文章中有诸多不严谨之处,转载并加以修改。
C++:
C++中,由virtual实现多态。除多态外,virtual有两个特殊用法:
1、虚基类(Virtual base class)
&&&&& 为解决多重继承时的二义性提出来的。使用方法:
class B :virtual public A
class C :virtual public A
class D: public B, public C
Abstract class
2、纯虚函数
含有纯虚函数的类叫做抽象类。纯虚函数如下:
void virtual foo() = 0;
注意:与C#不同,在C++中,abstract不是一个关键字。
abstract可以修饰类和方法。
virtual在C#中用于修饰方法和属性。
abstract修饰的类叫做抽象类,抽象类不能实例化。
abstract修饰的方法不能有实现体,相当于纯虚函数
public abstract Light {
& & public &void &turnon()
& & & & ...
& & public abstract& void &turnoff();
注意:抽象方法只能在抽象类中。
virtual 修饰的方法可以在一般类中。
其修饰的方法在父类中一定要有实现,即使只是一对大括号。
public& Light {
public& virtual& void &turnon() {};
抽象方法和virtual方法在派生类中的重载都是使用关键字override.
派生类如果是非abstract,则其中一定要有抽象方法的具体实现
一、Virtual方法(虚方法)
&&&&&virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:
&&&&&情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。
&&&&&情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。
二、Abstract方法(抽象方法)
&&&&&abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:245434次
积分:3397
积分:3397
排名:第6991名
原创:96篇
转载:27篇
评论:24条
(5)(5)(5)(6)(1)(1)(3)(1)(1)(3)(1)(1)(13)(6)(6)(1)(2)(1)(6)(3)(1)(5)(3)(1)(1)(1)(1)(4)(1)(2)(2)(1)(2)(5)(4)(2)(2)(5)(4)(1)(1)(1)(1)(5)(1)(1)(3)(2)(1)(7)(7)

我要回帖

更多关于 visual c与c的区别 的文章

 

随机推荐