- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
抽象类和虚方法的总结.doc
抽象类和虚方法的总结
抽象类定义:它的作用就是产生子类的同时给于子类一些特定的属性和方法。abstract修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用abstract修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。特性:1.抽象类不能被实例化;2.抽象类可以包含抽象方法和抽象访问器;3.不能用sealed修饰符修改抽象类,这意味着抽象类不能被继承;4.从抽象类派生的飞抽象类必须包括继承的所有抽象方法和抽象访问器的实现。总结:~抽象方法是隐式的虚方法;~只容许在抽象类中使用抽象方法声明;~因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号“{}”,实现由一个重方法提供,此重方法是非抽象类的成员;~在抽象方法声明中使用static或virtual修饰符是错误的;~除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样;~在静态属性上使用absteact修饰符是错误的;
~在派生类中,通过包括使用override修饰符的属性声明,可以重写抽象的继承属性。
using System;abstract class A{ public abstract void F(); protected int _x; public abstract int X { get; set; }}class B:A{ public override void F() { } public override int X { get{return _x;} set{_x=value;} }}class Test{ static void Main() { B b=new B(); b.X=10; Console.Write(b.X); }}
虚方法定义:简单的说,虚方法就是可以被子类重写的方法,如果子类重写了虚方法,那么运行时将使用重写后的逻辑,如果没有重写,则使用父类中虚方法的逻辑;virtual关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。
using System ; class A { public void F( ) { Console.WriteLine(A.F) ; } public virtual void G( ) { Console.WriteLine(A.G) ; } } class B: A { new public void F( ) { Console.WriteLine(B.F) ; } public override void G( ) { Console.WriteLine(B.G) ; } } class Test { static void Main( ) { B b = new B( ) ; A a = b; a.F( ) ; b.F( ) ; a.G( ) ; b.G( ) ; } } 输出是:A.F B.F B.G B.G
其实最重要的就是抽象方法不能实例化,要子类必须强制性的覆盖它的方法 。而虚方法则是提供了选择,可以覆盖可以不覆盖,继承基类中的虚方法。
总结比较如下:
抽象方法和虚方法的区别 :
~抽象方法和虚方法的区别在于:虚拟方法有一个实现部分,并为派生类提供了覆盖该方法的选项,相反,抽象方法没有提供实现部分,强制派生类覆盖方法(否则 派生类不能成为具体类);~abstract方法只能在抽象类中声明,虚方法则不是;~abstract方法必须在派生类中重写,而virtual则不必;~abstract方法不能声明方法实体,虚方法则可以。
文档评论(0)