日期:2014-05-17 浏览次数:21021 次
?
一、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(); //强制调用基类
?
?