C# 关键字---override

要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 override修饰符。override 声明重写的方法称为重写基方法。

使用override时需要注意以下几点:

  • override 方法提供从基类继承的成员的新实现。
  • 重写的基方法必须与 override 方法具有相同的签名。
  • 不能重写非虚方法或静态方法。重写的基方法必须是 virtualabstractoverride 的。
  • override 声明不能更改 virtual 方法的可访问性。 override 方法和 virtual 方法必须具有相同的访问级别修饰符。
  • 您不能使用 newstaticvirtual 修饰符来修改 override 方法。

以下是MSDN举得例子:

class TestOverride
{
public class Employee
{
public string name;

// Basepay is defined as protected, so that it may be
// accessed only by this class and derrived classes.
protected decimal basepay;

// Constructor to set the name and basepay values.
public Employee(string name, decimal basepay)
{
this.name = name;
this.basepay = basepay;
}

// Declared virtual so it can be overridden.
public virtual decimal CalculatePay()
{
return basepay;
}
}

// Derive a new class from Employee.
public class SalesEmployee : Employee
{
// New field that will affect the base pay.
private decimal salesbonus;

// The constructor calls the base-class version, and
// initializes the salesbonus field.
public SalesEmployee(string name, decimal basepay,
decimal salesbonus) : base(name, basepay)
{
this.salesbonus = salesbonus;
}

// Override the CalculatePay method
// to take bonus into account.
public override decimal CalculatePay()
{
return basepay + salesbonus;
}
}

static void Main()
{
// Create some new employees.
SalesEmployee employee1 = new SalesEmployee("Alice",
1000, 500);
Employee employee2 = new Employee("Bob", 1200);

Console.WriteLine("Employee4 " + employee1.name +
" earned: " + employee1.CalculatePay());
Console.WriteLine("Employee4 " + employee2.name +
" earned: " + employee2.CalculatePay());
}
}

输出结果:

Employee4 Alice earned: 1500
Employee4 Bob earned: 1200



posted @ 2011-11-20 22:17  Jason#Li  阅读(307)  评论(0编辑  收藏  举报