1 / 18
文档名称:

面向对象编程:继承.ppt

格式:ppt   页数:18页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

面向对象编程:继承.ppt

上传人:ranfand 2016/7/8 文件大小:0 KB

下载得到文件列表

面向对象编程:继承.ppt

文档介绍

文档介绍:C# 高级编程:继承 Kavass Zhu 2011/03/24 1课程重点?实现继承和接口继承?多重继承?调用函数的基类版本?虚方法、隐藏方法和方法的重写?派生类的构造函数?抽象类和抽象函数?接口的定义和实现 2 :实现继承和接口继承。实现继承:表示一个类型派生于一个基类型,拥有该基类型的所有成员字段和函数,在实现继承中,派生类型的每个函数采用基类型的实现代码, 除非在派生类型的定义中指定重写该函数的实现代码。在需要给现有类型添加功能,或许多相关的类型共享一个重要的公共功能时,这种类型的继承是非常有效的。接口继承:表示一个类型只继承类函数的签名,没有继承任何实现代码。在需要指定该类型具有某些可用的特性时,最好使用这种类型的继承。接口继承常常被看做提供了一种契约:让类型派生于接口,来保证为客户提供某个功能。在 C# 中,既有实现继承,也有接口继承。他们没有强弱之分,因为这两种继承都完全内置于语言中,因此很容易为不同的情形选择最好的体系结构。 C# 不支持多重实现继承,但支持多重接口继承。结构不支持实现继承,但结构自动派生于 ,并且支持接口继承。结构总是派生于 , 还可以派生于任意多个接口类总是派生于用户选择的另一个类,还可以派生于任意多个接口 3 如果要声明一个类派生于另一个类,可以使用下面的语法: class MyClass:MyBaseClass {}如果类或结构也派生于接口,则用逗号分隔开基类和接口: class MyClass : MyBaseClass,IInterface1,IInterface2 {} 对于结构语法如下: struct MyStruct : IInterface1 , IInterface2 {}如果在类定义中没有指定基类, C# 编译器就假定 是基类。因此下面两段代码是相同的: class MyClass:Object {} class MyClass {} C# 至此 object 关键字,它用作 类的假名,所以也可以写成: clsss MyClass:object {} 4 把一个基类函数声明为 virtual ,该函数就可以在任何派生类中重写。 Class MyBaseClass{ Public virtual string VirtualMethod(){ return “ this is virtual method ”;} } 也可以把属性声明为 virtual 。对于虚属性或重写属性,语法与非虚属性是相同的,但是要在定义中加上关键字 virtual ,其语法如下所示: public virtual string Name { Get {return _name;} Set {_name=value;} } 虚方法 5 C# 中虚函数的概念与标准 OOP 概念相同, 可以在派生类中重写虚函数。在调用方法时,会调用对象类型合适的方法。 C# 中,函数默认不是徐牛的,但可以显示的声明为 virtual 。在派生类中需要重写虚函数要使用 override 关键字显式声明: class MyClass:BaseClass { Public override string VirtualMethod() { return “ this is override method ”;}}如果在派生类中没有使用 override 关键字,并且派生类的函数名称和签名与基类中的函数和签名一致时,将会产生编译警告。成员字段和静态函数不能声明为 virtual 。因为他只对类中的实例函数成员有意义。虚方法的声明和重写不能是 private 。 6 如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有声明为 virtual 和 override ,派生类方法就会隐藏基类方法。在 C# 中隐藏方法有显式隐藏和隐式隐藏两种,一般建议用显式隐藏。隐式隐藏会收到编译器的警告信息。 class BaseClass { Public void Test() {} } 显式隐藏 class MyClass:BaseClass{ Public new void Test() {} } 隐式隐藏 class MyClass:baseClass{