C# 抽象类与抽象方法.doc

C# 抽象类与抽象方法.doc

ID:37916494

大小:99.00 KB

页数:7页

时间:2019-06-02

C# 抽象类与抽象方法.doc_第1页
C# 抽象类与抽象方法.doc_第2页
C# 抽象类与抽象方法.doc_第3页
C# 抽象类与抽象方法.doc_第4页
C# 抽象类与抽象方法.doc_第5页
资源描述:

《C# 抽象类与抽象方法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C#抽象类与抽象方法  朋友曾问我抽象类是否至少要有一个抽象方法,我查了很多资料,结果都是:“抽象类允许(但不要求)抽象类包含抽象成员”。但是一个抽象类里不写抽象方法就没有意义了,既然如此,还不如直接写个普通类?  在一个抽象类里可以不声明抽象方法,这在语法上是没问题的,但实际来说,这样是没有任何意义的。也就是说,你为什么会选择写一个抽象类呢?当然是为了想某个方法能够被OVERRIDE,以实现多态。后来查找MSDN结果如下:abstract修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstra

2、ct修饰符以指示类只能是其他类的基类。抽象类具有以下特性:o抽象类不能实例化。o抽象类可以包含抽象方法和抽象访问器。o不能用sealed修饰符修改抽象类,这意味着该类不能被继承。o从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。在方法或属性声明中使用 abstract修饰符以指示此方法或属性不包含实现。抽象方法具有以下特性:o抽象方法是隐式的virtual方法。o只允许在抽象类中使用抽象方法声明。o因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号(

3、{})。例如:publicabstractvoidMyMethod();o实现由overriding方法提供,它是非抽象类的成员。o在抽象方法声明中使用 static或 virtual修饰符是错误的。除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。o在静态属性上使用 abstract修饰符是错误的。o在派生类中,通过包括使用 override修饰符的属性声明可以重写抽象的继承属性。抽象类必须为所有接口成员提供实现。MSDN中C#语言规范的:10.1.1.1抽象类。此文如下:abstract修饰符用于表示所

4、修饰的类是不完整的,并且它只能用作基类。抽象类与非抽象类在以下方面是不同的:o抽象类不能直接实例化,并且对抽象类使用new运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。o允许(但不要求)抽象类包含抽象成员。o抽象类不能被密封。当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写那些抽象成员。在下面的示例中 1abstract class A 2{ 3public abstr

5、act void F(); 4} 5abstract class B: A 6{ 7public void G() {} 8} 9class C: B10{11public override void F() {12// actual implementation of F13}14}抽象类A引入抽象方法F。类B引入另一个方法G,但由于它不提供F的实现,B也必须声明为抽象类。类C重写F,并提供一个具体实现。由于C中没有了抽象成员,因此可以(但并非必须)将C声明为非抽象类。 有关抽象类和抽象方法的问题,我个人也做了一些

6、总结,如下: §abstract关键字用于将类指定为抽象类,这些抽象类可以派生出其他类。a. 一个抽象类可以同时包含抽象方法和非抽象方法。b.      抽象方法的目的在于指定派生类必须实现与这一方法关联的行为。c.      抽象方法只在派生类中真正实现,这表明抽象方法只存放函数原型(方法的返回类型,使用的名称及参数),而不涉及主体代码。d.     如果父类被声明为抽象类,并存在未实现的抽象方法,那么子类就必须实现父类中所有的abstract成员,除非该类也是抽象的。例如:1abstractclassA2{3pu

7、blicabstractvoidF();4}56abstractclassB:A7{8publicvoidG()9{}10}1112classC:B13{14publicoverridevoidF()15{16//actualimplementationofF17}18}1920说明:抽象类A引入抽象方法F。类B引入另一个方法G,但由于它不提供F的实现,B也必须声明为抽象类。类C重写F,并提供一个具体实现。由于C中没有了抽象成员,因此可以(但并非必须)将C声明为非抽象类。 e.      抽象类不能被实例化,使用ov

8、erride关键字可在派生类中实现抽象方法,经override声明重写的方法,其签名必须与override方法的签名一致。 C#.NET虚方法中中的virtual和override关键字的使用收藏谈到C#.NET的虚方法就不得不先说一下继承性(inheritance),继承和多态度、封装一起构成面向对象程序设计的三大要素,继承指一个类基于一个已

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。