继承

来源:互联网 发布:小企业网络方案 编辑:程序博客网 时间:2024/05/22 12:30

学习了这么久,一直都是在学关于面向对象语言。面向对象的三大特性是什么呢?很简单,学过的人都知道,就是“封装,继承,多态”,可是这三大特性有多少人能够真正明白呢。其实我学了这么久也就知道些简单的概念,下面我在回顾下,把三大特性重新学习下。先学习下继承吧。不多说了,下面就开始学习去了。

前面学习的,所有的类最终都派生于System.Object类,但并没有说明如何创建继承类的层次结构。下面就给好好学习下。

继承的类型

首先介绍C#在继承方面支持和不支持的功能

1、实现继承和接口继承

在面向对象的编程中,有两种截然不同的继承类型:实现继承和接口继承。

● 实现继承:表示一个类型派生于一个基类型,拥有该基类型的所有成员字段和函数。在实现继承中,派生类型的每个函数采用基类型的实现代码,除非在派生类型的定义中指定重写该函数的实现代码。需要给现有的类型添加功能,或许多相关的类型共享一组重要的公共功能时,这种类型的继承是非常有效的。

● 接口继承:表示一个类型只继承了函数的签名,没有继承任何实现代码。在需要指定该类型具有某些可用的特性时,最好使用这种类型的继承。例如,某些类型可以指定从接口System.IDisposable 中派生,从而提供一种清理资源的方法Dispose()。由于某种类型清理资源的方式可能与另一种类型的完全不同,所以定义通用的实现代码是没有意义的,此时就适合使用接口继承。接口继承常常被看做提供了一种契约:让类型派生于接口,来保证为客户提供某个功能。

在C#中,既有实现继承,也有接口继承。它们没有强弱之分,因为这两种继承都完全内置于语言中,因此很容易为不同的情形选择最好的体系结构。

2、多重继承

一些语言如C++支持所谓的"多重继承",即一个类派生于多个类。使用多重继承的优点是有争议的:一方面,毫无疑问,可以使用多重继承编写非常复杂、但很紧凑的代码,如C++ ATL库。另一方面,使用多重实现继承的代码常常很难理解和调试(这也可以从C++ ATL库中看出)。

C#不支持多重实现继承。而C#又允许类型派生于多个接口。

3、结构和类

使用结构的一个限制是结构不支持继承,但每个结构都自动派生于System.ValueType。实际上还应更仔细一些:不能建立结构的类型层次,但结构可以实现接口。

定义结构和类可以总结为:

● 结构总是派生于System.ValueType,它们还可以派生于任意多个接口。

● 类总是派生于用户选择的另一个类,它们还可以派生于任意多个接口。

 

原创粉丝点击