.net系统自学笔记——继承

继承

1.继承的类型

2.实现继承

3.访问修饰符

4.接口

一、继承的类型:

1.实现继承和接 口继承

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

  • 实现继承:表示一个类型派生于一个基类型,它拥有该基类型的 所有成员字段和函 数。 在实现继承中,派 生类型采用基类型的 每个函数的实现代码,除 非在派生类型的定义中 指定重写某个函 数的 实现代码。 在需要给现有的 类型添加功能,或许多相关的 类型共享一组重要的公共功能时,这 种类型的继承非常有用。
  • 接口 继承:表示一个类型只继承了函 数的 签名,没 有继承任何实现代码。 在需要指定该类型具有某些可用的 特性时,最好使用这种类型的 继承。唧 支持实现继承和接 口 继承。 它们都内 置于语言和架构中,因 此可以 根据应用程序的 体系结构选择合适的继承。

2.多重继承

C#不支持多重实现继承。 而C#又允许类型派生自 多个接 口——多重接口 继承。 这说明,C# 可以 派生自 另一个类和任意多 个接口 。更准确地说,因 为System.Object是 一个公共的 基类,所 以 每个 C#类除了(除了Object类之外)都 有一个基类,还可以 有任意多个基接 口。

3.结构和类

结构总是派生自System.ValueType,不支持继承,但可以实现任意多个接口

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

二、实现继承:

语法:在新建类的类名/结构名,后跟【:】+ 基类名或接口名,如果有多个,可用【,】分隔

C#不支持私有继承

1.虚方法 :

如果基类函数声明为virtual,可以在任何派生类中重写该函数。也可以把基类属性声明为virtual,派生类中也可重写。在调用方法时,会调用该类对象的合适方法 。C#中函数默认情况下不是虚拟的,除非virtual关键字进行显式声明(而在JAVA中,所有函数都是虚拟的)C#要求在派生类的函数重写另一个函数时,要使用override关键字进行显式声明。

成员字段和静态都不能声明为virtual,因为这个概念只对类中的实例函数成员有意义。

2.隐藏方法:如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有分别声明为virtual和override,派生类方法就会隐藏基类方法。C#中要隐藏一个方法应使new关键字声明。

3.调用函数的基类版本:从派生类中调用基类方法:base.<方法名>()

4.抽象类和抽象函数:C#允许把类和函数声明为abstract。抽象类不能实例化,抽象方法不能直接实现,必须在非抽象的派生类中重写。所以抽象函数本身也是虚拟的,尽管没有virtual关键字。如果类包含抽象函数,则该类也是抽象的,也必须声明为抽象的。

5.密封类和密封方法:C#允许把类和方法声明为sealed。对于类,表示不能被继承,对于方法,表示不能被重写。要在方法或属性上使用seded关键字,必须先从基类上把它声明 为要重写的 方法或属性。 如果基类上不希望有重写的方法或属性,就不要把它声明为 叫virtual。

6.派生类的构造函数:

基类,派生类,构造函数的执行顺序:总是最先执行根其类的构造函数,再从上向下,执行编译器要实例化的类为止。如何调用基类的构造函数:子类构造函数名():base(){}

base,this关键字是调用另一个构造函数时允许使用的唯一关键字。this代表当前实例

三、修饰符

1.可见性修饰符:public,protected,internal,private,protected internal

不能把类型定义为protected、private,protected internal ,因为这些修饰符对于包含在名称空间中的 类型没有意义。 因 此这些修饰符只能 应用于成员。 但是,可 以 用这些修饰符定义嵌套的 类型 即,包含在 其他类型中的类型) ,因 为在这 种情况下,类 型也具有成员的 状态。

2.其他修饰符:new,static,virtual,abstract,override,sealed,extern(似应用于静态方法,外部用另一种语言实现)

可以应用于类型的成员,而且有不同的用途。在应用于类型时,其中的几个修饰符也是有意义的。

四、接口

声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的实现方式。一般情况下,接口只能包含方法,属性,索引器和事件的声明。不能实例化接口,它只能包含其成员的签名,接口既不能有构造函数也不能有字段。接口定义也不允许包含运算符重载。在接口定义中还不允许声明关于成员的修饰符。接口成员总是公有的,不能声明为虚拟或静态。如果需要,就应由实现的类来声明,因此最好实现执行的类来声明访问修饰符。

(一)、接口的定义和实现:

1.声明:关键字:Interface。接口的命名通常以大写的I开头

2.实现:也类继承的方式相同,可以与类的继承同时存在:在类名后加【:】+接口名

         派生类必须实现基类的所有方法

3.派生类的使用,新建对象

(二)、派生的接口

接口可以彼此继承,其方式与类的继承方式相同

原文地址:https://www.cnblogs.com/gdx4430090/p/3164355.html