c#高级编程.第4章继

c#高级编程.第4章继

ID:34415569

大小:91.66 KB

页数:18页

时间:2019-03-05

c#高级编程.第4章继_第1页
c#高级编程.第4章继_第2页
c#高级编程.第4章继_第3页
c#高级编程.第4章继_第4页
c#高级编程.第4章继_第5页
资源描述:

《c#高级编程.第4章继》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第4章继   承第3章介绍了如何使用C#中的各个类,其重点是如何定义方法、构造函数、属性和单个类(或单个结构)中的其他成员。我们指出,所有的类最终都派生于System.Object类,但并没有说明如何创建继承类的层次结构。继承是本章的主题。我们将讨论C#和.NETFramework如何处理继承。本章的主要内容如下:● 继承的类型● 实现继承● 访问修饰符● 接口4.1 继承的类型首先介绍C#在继承方面支持和不支持的功能。4.1.1 实现继承和接口继承在面向对象的编程中,有两种截然不同的继承类型:实现继承和接口继承。● 实现继承:表示一个类型派生于一个基类型,拥有该基类

2、型的所有成员字段和函数。在实现继承中,派生类型的每个函数采用基类型的实现代码,除非在派生类型的定义中指定重写该函数的实现代码。在需要给现有的类型添加功能,或许多相关的类型共享一组重要的公共功能时,这种类型的继承是非常有效的。例如第31章讨论的WindowsForms类。第31章也讨论了基类System.Windows.Forms.Control,该类提供了常用Windows控件的非常复杂的实现代码,第31章还讨论了许多其他的类,例如System.Windows.Forms.TextBox和System.Windows.Forms.ListBox,这两个类派生于Cont

3、rol,并重写了函数,或提供了新的函数,以实现特定类型的控件。● 接口继承:表示一个类型只继承了函数的签名,没有继承任何实现代码。在需要指定该类型具有某些可用的特性时,最好使用这种类型的继承。例如,某些类型可以指定从接口System.IDisposable(详见第12章)中派生,从而提供一种清理资源的方法Dispose()。由于某种类型清理资源的方式可能与另一种类型的完全不同,所以定义通用的实现代码是没有意义的,此时就适合使用接口继承。接口继承常常被看做提供了一种契约:让类型派生于接口,来保证为客户提供某个功能。在传统上,像C++这样的语言在实现继承方面的功能非常强大

4、。实际上,实现继承是C++编程模型的核心。另一方面,VB6不支持类的任何实现继承,但因其底层的COM基础体系,所以它支持接口继承。在C#中,既有实现继承,也有接口继承。它们没有强弱之分,因为这两种继承都完全内置于语言中,因此很容易为不同的情形选择最好的体系结构。4.1.2 多重继承一些语言如C++支持所谓的"多重继承",即一个类派生于多个类。使用多重继承的优点是有争议的:一方面,毫无疑问,可以使用多重继承编写非常复杂、但很紧凑的代码,如C++ATL库。另一方面,使用多重实现继承的代码常常很难理解和调试(这也可以从C++ATL库中看出)。如前所述,使健壮代码的编写容易一

5、些,是开发C#的重要设计目标。因此,C#不支持多重实现继承。而C#又允许类型派生于多个接口。这说明,C#类可以派生于另一个类和任意多个接口。更准确地说,因为System.Object是一个公共的基类,所以每个C#类(除了Object类之外)都有一个基类,还可以有任意多个基接口。4.1.3 结构和类第3章区分了结构(值类型)和类(引用类型)。使用结构的一个限制是结构不支持继承,但每个结构都自动派生于System.ValueType。实际上还应更仔细一些:不能建立结构的类型层次,但结构可以实现接口。换言之,结构并不支持实现继承,但支持接口继承。事实上,定义结构和类可以总结

6、为:● 结构总是派生于System.ValueType,它们还可以派生于任意多个接口。● 类总是派生于用户选择的另一个类,它们还可以派生于任意多个接口。4.2 实现继承如果要声明一个类派生于另一个类,可以使用下面的语法:classMyDerivedClass:MyBaseClass{//functionsanddatamembershere}注意:这个语法非常类似于C++和Java中的语法,但是,C++程序员习惯于使用公共和私有继承的概念,要注意C#不支持私有继承,因此基类名上没有public或private限定符。支持私有继承会大大增加语言的复杂性,实际上私有继承在

7、C++中也很少使用。如果类(或结构)也派生于接口,则用逗号分隔开基类和接口:publicclassMyDerivedClass:MyBaseClass,IInterface1,IInterface2{//etc.}对于结构,语法如下:publicstructMyDerivedStruct:IInterface1,IInterface2{//etc.}如果在类定义中没有指定基类,C#编译器就假定System.Object是基类。因此下面的两段代码生成相同的结果:classMyClass:Object  //derivesfromSystem.Objec

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

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

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