1. 继承的类型:
- 实现继承:表示一个类型派生于一个基类型,拥有该基类型的所有成员字段和函数。派生类型的每个函数采用基类型的实现代码,除非在派生类型的定义中指定重写该函数的实现代码。
- 借口继承:表示一个类型之继承了函数的签名,没有继承任何实现代码。
2. 多重继承
C#不支持多重实现继承,允许类型派生于多个接口。
3. 虚方法
把一个基类函数声明为virtual,该函数就可以在派生类中重写。
4. 隐藏方法
如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有声明为virtual和override,派生类方法就会隐藏基类方法。
C#中使用关键字new声明我们要隐藏一个方法:
class MyDerivedClass : HisBaseClass{public new int MyGroovyMethod(){// some groovy implementationreturn 0;}}
重载、重写、隐藏的定义:
- 重载:同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法参数列表不同。通过传递不同的参数来决定调用哪一个方法。
- 重写:继承时发生,在子类中重新定义父类中的方法。例如:基类方法声明为virtual方法,派生类中使用override声明此方法的重写。
- 隐藏:基类方法不做声明(默认为非虚方法),在派生类中使用new声明方法的隐藏
重载时,根据参数选择调用方法;
重写时,访问父类、子类皆调用子类的重写方法;
隐藏式,访问父类调用父类的方法,访问子类则调用子类的方法。
比如父类A,有个方法标记为virtual,a(){} 子类B继承A,也声明一个方法a(){} 如果B里面的a()使用override,那么访问A的方法时实际上调用了B里面声明的方法,相当于A的方法被覆盖了,new就不是,访问A的a还是A里面定义的方法,访问B就是B里面定义的方法.
其他关于virtual和override修饰符的重要信息:
- 重写和被重写的方法必须有相同的可访问性。
- 不能重写static 方法或非虚方法
- 方法、属性、索引以及事件,都可以被声明为virtual和override