chuqi

博客园 首页 新随笔 联系 订阅 管理
  • virtual 用在基类中,指定一个虚方法(属性),表示这个方法(属性)可以重写。
  • override 用在派生类中,表示对基类虚方法(属性)的重写。

以上的基类和派生类都是相对的。B 是 C 的基类,也可以是 A 的派生类,B 中既可以对 A 中的 virtual 虚方法用 override 重写,也可以指定 virtual 虚方法供 C 重写。

  • 不能重写非虚方法或静态方法。重写的基方法必须是 virtual、abstract 或 override 的。为什么 override 也可以重写呢?因为基类中的 override 实际上是对基类的基类进行的重写,由于继承可传递,所以也可以对基类中 override 的方法进行重写。
  • override 声明不能更改 virtual 方法的可访问性。override 方法和 virtual 方法必须具有相同的访问级别修饰符。
  • 不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。
  • 重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被重写的属性必须是 virtual、abstract 或 override 的。
public class BaseClass
{
    public virtual string GetString()
    {
        return "这是一个虚方法。";
    }
}


public class DerivedClass : BaseClass
{
    public override string GetString()
    {
        return "这是重写了的方法。";
    }
}

可以看出,重写与前面讲的重载是有区别的.

posted on 2009-06-09 12:41  chu  阅读(1045)  评论(0)    收藏  举报