日期:2014-05-17 浏览次数:20850 次
?
一、Virtual, override, abstract, new
?
????? 基类希望定义可以由子类重写的方法,必须指定 virtual 方法,子类重写的时候,必须使用 override 修饰该方法。 如
果希望防止派生类重写某个虚方法,可以使用 sealed 修饰:
class SalesPerson : Employee { public override sealed void GiveBonus(float amout) { } } sealed Class PTSalesPerson : SalesPerson { public override void GiveBonus(float amout)//error! { } }?
?????? 如果需要防止创建类的对象,可以使用 abstract 关键字,抽象类的方法可以提供默认实现:
abstract class Shape { public virtual void Draw() { ….. } }?
?????? 子类重写虚方法不是必须的,如果要强制每一个子类重写 Draw() 方法,可以使用 abstract 关键字将方法标记为抽象的。
public abstract class Shape { public abstract void Draw();//不提供实现 }?
??????? 如果子类不重写抽象方法,该子类也必须定义成抽象类,抽象方法只能定义在抽象类中。
class Circle { public void Draw() { …… } } //Error class ThreeDCircle : Circle { public void Draw() { …… } }?
?????? 这里有 Error ,因为子类和父类有相同的方法,可以有 2 中方法:使用 virtual 和 override ,或者子类的方法加上
new 关键字,这时候表示子类完全是一个全新的方法,只不过名字相同而已。
public new void Draw() { …… } //注意 ThreeDCircle o = new ThreeDCircle(); o.Draw(); //子类 ((Circle)o).Draw(); //强制调用基类?
?