继承的原则
上面详细讲解了如何实现继承,包括单继承和多继承,本节主要总结一下C#中实现继承的几个主要原则,分别如下:
q 除了object类,每个类有且只有一个直接基类,如果没有显式指定类的直接基类,那么它的直接基类就隐含的设置为object。object类没有任何直接或间接基类,它是所有类的终极基类;
q 无论基类成员的可访问性如何,除构造函数和析构函数外,所有其他基类的成员都能被子类继承,然而,有些继承成员在子类中可能是不可访问的,比如,基类的private成员在子类中不可访问,但是,如果将子类的对象作为参数传入基类的方法内,那么在基类的代码内部,就可以通过子类或者子类的对象来访问基类的private成员;
q 子类可以扩展它的直接基类;
q 继承是可以传递的,比如C类从B类继承,而B类从A类继承,那么C类就会既继承B类中的成员,又继承A类中的成员;
q 类不能循环继承,比如A类继承于B类,而B类继承于C类,那么C类就不能再去继承A类,因为它们之间存在了一种循环关系;
q 类的直接基类必须至少与类本身具有同样的可访问性,比如,如果从private类派生一个public类,将会导致编译时错误;
q 在子类中可以声明具有相同名称或签名的新成员来隐藏从基类继承而来的成员,但是,隐藏继承而来的成员时并不移除该成员,而只是使被隐藏的成员在子类中不可以直接访问;
q 类中可以声明虚方法等,而子类可以重写这些虚方法的实现;
q C#中只支持类的单一继承,但是支持接口的多重继承;
q 类的实例包含在该类中及它的所有基类中声明的所有实例字段的集合,并且存在一个从子类到它的任何基类的隐式转换,因此,可以将子类的实例看成是其任何基类的实例的引用。
——摘自《C#编程词典》