虚方法与抽象方法有什么区别.doc

上传人:桔**** 文档编号:544526198 上传时间:2022-10-13 格式:DOC 页数:5 大小:27KB
返回 下载 相关 举报
虚方法与抽象方法有什么区别.doc_第1页
第1页 / 共5页
虚方法与抽象方法有什么区别.doc_第2页
第2页 / 共5页
虚方法与抽象方法有什么区别.doc_第3页
第3页 / 共5页
虚方法与抽象方法有什么区别.doc_第4页
第4页 / 共5页
虚方法与抽象方法有什么区别.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《虚方法与抽象方法有什么区别.doc》由会员分享,可在线阅读,更多相关《虚方法与抽象方法有什么区别.doc(5页珍藏版)》请在金锄头文库上搜索。

1、虚方法与抽象方法有什么区别虚方法与抽象方法有什么区别?此博文包含图片 (2009-05-17 14:19:23)转载标签:it分类: DOTNET(C#)学习抽象方法 使用abstract关键字 public abstract bool Withdraw(); 抽象方法是必须被派生类覆写的方法。 抽象方法是可以看成是没有实现体的虚方法 如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法 虚方法 使用virtual关键字 public virtual bool Withdraw(); 调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。 虚方法可以有实

2、现体 若一个实例方法的声明中含有 virtual 修饰符,则称该方法为虚拟方法;一个虚拟方法的实现可以由派生类取代。取代所继承的虚拟方法的实现的过程称为重写该方法;在一个虚拟方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。 虚函数的限制: 1.虚函数仅适用于有继承关系的类对象, 所以只有类的成员函数才能说明为虚函数. 2.静态成员函数不能是虚函数. 3.内联函数不能是虚函数. 4构造函数不能是虚函数. 5.析构函数可以是虚函数. 简单点说,抽象方法是需要子类去实现的.虚方法,是已经实现了,子类可以去覆盖,也可以不覆盖取决于需求. 如 public abs

3、tract class AUser public abstract UserInfo getUser(); public virtual void Save(UserInfo info) /实现保存的功能 public class UserSqlServer:AUser public override UserInfo getUser() /一定要实现的,抽象类只给了抽象方法 /假设抽象类针对SqlServer实现的功能,这里不需要实现了. public class UserOracle:AUser public override UserInfo getUser() /一定要实现的,抽象类只

4、给了抽象方法 /假设抽象类针对Oracle实现的功能 public override void Save(UserInfo info) /覆盖抽象类中的Save方法 以上只是例子,真实并不这么做. =虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢?1. 虚方法必须有实现部分,抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。如:/抽象方法public abstract class Animalpublic abstract void Sleep();public abstract void Eat();/虚方法public class Anima

5、lpublic virtual void Sleep()public virtual void Eat()2. 抽象方法只能在抽象类中声明,虚方法不是。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。如:public class Animalpublic abstract void Sleep();public abstract void Eat();编译器会报错:Main.cs(10): VSTest.Animal.Sleep() is abstract but it is contained in nonabstract class VSTest.AnimalMain.cs

6、(11): VSTest.Animal.Eat() is abstract but it is contained in nonabstract class VSTest.Animal3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚方法不必。如:public abstract class Animalpublic abstract void Sleep();public abstract void Eat();public class Cat : Animalpublic override void Sleep() Console.WriteLine( Cat is sleeping ); / we need implement Animal.Eat() here编译器会报错:Main.cs(14): VSTest.Cat does not implement inherited abstract member VSTest.Animal.Eat(),因为我们没有实现抽象类中所有抽象方法。=

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号