面向对象编程:继承

面向对象编程:继承

ID:22623865

大小:107.00 KB

页数:18页

时间:2018-10-21

面向对象编程:继承_第1页
面向对象编程:继承_第2页
面向对象编程:继承_第3页
面向对象编程:继承_第4页
面向对象编程:继承_第5页
资源描述:

《面向对象编程:继承》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C#高级编程:继承KavassZhu2011/03/24课程重点实现继承和接口继承多重继承调用函数的基类版本虚方法、隐藏方法和方法的重写派生类的构造函数抽象类和抽象函数接口的定义和实现1.继承的类型继承的类型主要包括两种:实现继承和接口继承。实现继承:表示一个类型派生于一个基类型,拥有该基类型的所有成员字段和函数,在实现继承中,派生类型的每个函数采用基类型的实现代码,除非在派生类型的定义中指定重写该函数的实现代码。在需要给现有类型添加功能,或许多相关的类型共享一个重要的公共功能时,这种类型的继承是非常有效的。接口继承:表示一个类型只继承类函数的签名,没有继承任

2、何实现代码。在需要指定该类型具有某些可用的特性时,最好使用这种类型的继承。接口继承常常被看做提供了一种契约:让类型派生于接口,来保证为客户提供某个功能。在C#中,既有实现继承,也有接口继承。他们没有强弱之分,因为这两种继承都完全内置于语言中,因此很容易为不同的情形选择最好的体系结构。C#不支持多重实现继承,但支持多重接口继承。结构不支持实现继承,但结构自动派生于System.ValueType,并且支持接口继承。结构总是派生于System.ValueType,还可以派生于任意多个接口类总是派生于用户选择的另一个类,还可以派生于任意多个接口如果要声明一个类派生于

3、另一个类,可以使用下面的语法:classMyClass:MyBaseClass{}如果类或结构也派生于接口,则用逗号分隔开基类和接口:classMyClass:MyBaseClass,IInterface1,IInterface2{}对于结构语法如下:structMyStruct:IInterface1,IInterface2{}如果在类定义中没有指定基类,C#编译器就假定System.Object是基类。因此下面两段代码是相同的:classMyClass:Object{}classMyClass{}C#至此object关键字,它用作System.Object

4、类的假名,所以也可以写成:clsssMyClass:object{}2.实现继承把一个基类函数声明为virtual,该函数就可以在任何派生类中重写。ClassMyBaseClass{PublicvirtualstringVirtualMethod(){return“thisisvirtualmethod”;}}也可以把属性声明为virtual。对于虚属性或重写属性,语法与非虚属性是相同的,但是要在定义中加上关键字virtual,其语法如下所示:publicvirtualstringName{Get{return_name;}Set{_name=value;}}

5、2.1虚方法C#中虚函数的概念与标准OOP概念相同,可以在派生类中重写虚函数。在调用方法时,会调用对象类型合适的方法。C#中,函数默认不是徐牛的,但可以显示的声明为virtual。在派生类中需要重写虚函数要使用override关键字显式声明:classMyClass:BaseClass{PublicoverridestringVirtualMethod(){return“thisisoverridemethod”;}}如果在派生类中没有使用override关键字,并且派生类的函数名称和签名与基类中的函数和签名一致时,将会产生编译警告。成员字段和静态函数不能声明

6、为virtual。因为他只对类中的实例函数成员有意义。虚方法的声明和重写不能是private。如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有声明为virtual和override,派生类方法就会隐藏基类方法。在C#中隐藏方法有显式隐藏和隐式隐藏两种,一般建议用显式隐藏。隐式隐藏会收到编译器的警告信息。classBaseClass{PublicvoidTest(){}}显式隐藏classMyClass:BaseClass{PublicnewvoidTest(){}}隐式隐藏classMyClass:baseClass{publicvoidTest(

7、){}}2.2隐藏方法C#有一种特殊的语法用于从派生类中调用方法的基类版本:base.MethodName()。语法如下:classBaseClass{PublicvirtualstringgetName(){return“kavass”;}}ClassMyClass:BaseClass{publicoverridestringgetName(){returnbase.getName()+”zhu”;}}这时MyClass的实例调用getName()方法是将得到的是基类的getName的方法加“zhu”以后的字符串2.3调用函数的基类版本C#允许把类和函数声明

8、为abstract,抽象类不能实例化,

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

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

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