1.子类重写基类的方法时,只能放宽限制
,而不能收紧限制
类可以重写基类定义的protected
方法,将重写方法设为public
(放宽),但是不能将重写方法设为private
(收紧)。之所以不能在派生类中收紧对基类方法的访问,是因为CLR承诺派生类总能转型为基类,并获取对基类方法的访问权。
2.static
只能应用于类,不能应用于结构(值类型)。
static
有以下限制
- 静态类必须直接从基类
System.Object
派生,从其他任何类派生都没有意义。因为继承只适用于对象,而你不能创建静态类的实例。 - 静态类不能实现任何接口。因为只有使用类的实例时,才可调用类的接口方法。
- 静态类只能定义静态成员(字段、方法、属性和事件),任何实例成员都会导致编译器报错。
- 静态类不能作为字段、方法参数或局部变量使用。因为它们都代表引用了实例的变量,而这是不允许的。
3.设计类型时应尽量减少
虚方法数量。
- 调用虚方法的速度比调用非虚方法慢。
- JIT编译器不能内嵌
(inline)
虚方法,这进一步影响性能。 - 虚方法是组件版本控制变得更脆弱。
- 定义基类型是,经常要提供一组重载的简便方法
(convenience method)
。
如果这些方法是多态的,那么最好的办法就是使最复杂的方法成为虚方法,使所有重载的简便方法称为非虚方法。
该部分建议读原文P145-148