日期:2014-05-17  浏览次数:20850 次

C#笔记(1)

?

、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(); //强制调用基类
?

?