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