EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

C#sealed关键字、base关键字以及构造函数和继承

sealed关键字

sealed只能写在override前面,其它的成员不能用sealed

可以sealed类本身,就等于sealed类里面所有的virtual函数了


sealed出现的原因其实很简单,

因为不停的继承会产生很多错误,

所以有些类必须封闭,

于是产生了sealed关键字。


初始类并不需要封闭,

只有继承和重写的类才需要sealed。

 

base关键字

base和this略像,base主要用于:
✦ 从子类访问父类里被重写的函数
✦ 调用父类的构造函数
public class House:Asset
{
    ...
    public override decimal Liability=>base.Liability+Mortgage;
}

✦ 这种写法可保证,访问的一定是Asset的Liability属性,无论该属性是被重写还是被隐藏了


构造函数和继承

① 子类必须声明自己的构造函数(父类的有参构造函数存在时)
② 父类的构造函数(有参)不是自动继承到子类的,需要在子类中访问才行
③ 子类必须重新定义它想暴露的构造函数(不管有参无参)

 

错误示例:

错误示例

 

正确示例:

正确示例


✦ 调用父类的构造函数需要使用base关键字
✦ 父类的构造函数肯定会先执行


■ 当子类定义了构造函数但没用base关键字,父类的无参构造函数会被隐式继承。

★ 如果父类没有无参构造函数,那么子类就必须在构造函数里使用base关键字。

This article was last edited at 2020-03-16 00:53:37

* *