C#面向对象之继承(曹海涛)

网友投稿 752 2022-09-15

C#面向对象之继承(曹海涛)

C#面向对象之继承(曹海涛)

一、继承

什么是继承?继承是两个或多个类之间存在的依赖关系,其中被继承的类称为父类或基类,继承的类称为子类或派生类。在继承关系中,父类是对子类的共性提取,子类是对父类的扩展。

上面设计的文字类和图片类中存在代码冗余,为了去除冗余,我通过提取共性的方式引入了第三个类,并让其他两个类继承它,代码如下:

通过继承连接文字/图片类和它们提取共性的信息类,实现了代码的复用性,后期如果加上音频类和视频类也可以通过继承复用信息类的代码,而不用重复编写Content和Size属性。

继承的规则:

1、子类可以继承除了父类构造函数之外的所有非私有成员。

2、子类的任意构造函数调用之前会先调用父类的默认构造函数。

3、子类的可访问性不能高于父类,因为这样会强制父类的可访问性同子类的可访问性(比如Word用public修饰,Information用internal修饰)。

4、C#不允许类的多重继承,即一个类只能有一个直接父类(继承引号符后面只能写一个类)。

根据继承规则二,总结继承中代码的执行顺序:执行变量的初始化表达式 → 执行父类的(默认)构造函数 → 调用类型自己的构造函数

二、C#关键字:base

继承的规则一说明子类无法使用父类的构造函数,所以我在文字类和图片类中创建了自己的构造函数。继承的规则二说明子类只能隐式地调用父类的默认构造函数,而无法调用父类的非默认构造函数,即无法复用父类的非默认构造函数,所以可以通过base关键字使子类的构造函数自定义调用父类的非默认构造函数。下面修改文字类和图片类使其复用父类的非默认构造函数:

base关键字除了可以复用父类非默认构造函数之外,还可以复用父类的其他非私有成员(见C#多态)。

总结:base关键字的使用方式同this关键字一样,区别在于this关键字指向本类,base关键字指向父类。

三、C#关键字:sealed

sealed关键字可以防止被继承或者被重写。

1 ///

2 /// 视频类(不能被其他类继承)

3 ///

4 public sealed class Video : Information { }

注:sealed在防止被继承时多用于工具类。

sealed防止被重写(见C#多态)。

四、C#关键字:protected

protected是专门用于继承中的访问修饰符,修饰在父类的成员上使其成员可被本类及其子类访问。

注:protected多用于修饰父类的方法。

访问修饰符直白对比:对全世界开放,使用public;只对本国开放,使用internal;只对家族开放,使用protected;只有自己知道,使用private。

五、类型之间的关系:包含

C#五大类型(类、接口、委托、枚举、结构)之间的相互嵌套即包含关系。既可以包含已定义类型也可以直接在被包含类型内定义类型。

包含的作用同继承一样也是提高代码的复用性。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用jacob调用Windows的com对象,转换Office文件为pdf、html等
下一篇:Mitmproxy 在 Windows 操作系统中的使用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~