探索flutter框架开发的app在移动应用市场的潜力与挑战
752
2022-09-15
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~