继承作为面向对象的三大特性之一,对代码复用有着重要的作用,下面是一些C#中继承的小要点,都是犄角旮旯的东西。仅作参考:
1. 结构不支持继承
其实这么说不太确切,只是定义结构的时候,不能使用实现继承,所有的结构都是默认继承于System.ValueType的。而且结构也可以实现接口。
2. C#的Virtual
当函数标为Virtual的时候,该函数就可以在子类中被重写了。C#和Java对虚函数的处理的不同在于,Java的所有的函数都默认是虚函数,而C#出于性能考虑,只有被声明为虚函数的,才会被编译器识别为虚函数。
还有一点就是成员字段和静态函数不能被声明为Virtual.
这里不得不提到一个隐藏方法,C#为了类库的版本维护,可以在子类使用new关键字,隐藏父类的某个方法。
显示的调用父类的函数使用base.
3. 继承的构造函数的调用
很简单,就是一个构造函数被调用的时候,默认会在最开始调用父类的无参构造函数。这样一直一直的调用上去,一直到object为止,然后就开始调用自己的构造函数。
也可以显示规定调用父类的哪个构造函数:在构造函数后面加:base(...)就好了
1. 结构不支持继承
其实这么说不太确切,只是定义结构的时候,不能使用实现继承,所有的结构都是默认继承于System.ValueType的。而且结构也可以实现接口。
2. C#的Virtual
当函数标为Virtual的时候,该函数就可以在子类中被重写了。C#和Java对虚函数的处理的不同在于,Java的所有的函数都默认是虚函数,而C#出于性能考虑,只有被声明为虚函数的,才会被编译器识别为虚函数。
还有一点就是成员字段和静态函数不能被声明为Virtual.
这里不得不提到一个隐藏方法,C#为了类库的版本维护,可以在子类使用new关键字,隐藏父类的某个方法。
显示的调用父类的函数使用base.
3. 继承的构造函数的调用
很简单,就是一个构造函数被调用的时候,默认会在最开始调用父类的无参构造函数。这样一直一直的调用上去,一直到object为止,然后就开始调用自己的构造函数。
也可以显示规定调用父类的哪个构造函数:在构造函数后面加:base(...)就好了