使用 override 修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签名。
不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。
重写声明不能更改虚方法的可访问性。重写方法和虚方法必须具有相同的访问级修饰符。
不能使用下列修饰符修改重写方法:
new static virtual abstract
重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且重写属性必须是虚拟的、抽象的或重写的。
有关访问基类成员的更多信息,请参见 7.5.8 基访问。
有关重写方法的更多信息,请参见 10.5.4 重写方法。
示例
请参见 virtual 关键字的示例。
从具有重写方法的派生类中,仍然可以通过使用 base 关键字来访问同名的重写基方法。例如,如果有虚方法 MyMethod()
和派生类上的重写方法,就可以通过下列调用从派生类访问此虚方法:
base.MyMethod()
将此方法与使用范围解析运算符 (::
) 和基类名的 C++ 方法进行比较,例如:
My_Base_Class_Name::MyMethod()
示例
在该示例中,有一个基类 Square
和一个派生类 Cube
。因为立方体的面积是六个正方形的面积之和,因此可以通过调用基类上的 Area()
方法来计算。
// cs_override_keyword.cs // Calling overriden methods from the base class using System; class TestClass { public class Square { public double x; // Constructor: public Square(double x) { this.x = x; } public virtual double Area() { return x*x; } } class Cube: Square { // Constructor: public Cube(double x): base(x) { } // Calling the Area base method: public override double Area() { return (6*(base.Area())); } } public static void Main() { double x = 5.2; Square s = new Square(x); Square c = new Cube(x); Console.WriteLine("Area of Square = {0:F2}", s.Area()); Console.WriteLine("Area of Cube = {0:F2}", c.Area()); } }
输出
Area of Square = 27.04 Area of Cube = 162.24