- C# 类教程-类
- C# 类教程-类成员:字段(域)、属性、索引
- C# 类教程-类成员:方法、事件
- C# 类教程-类成员:运算符重载与索引器
- C# 类教程-类成员:构造函数和析构函数
- C# 类教程-类成员:嵌套类型
- C# 类教程-访问修饰符与可访问性级别
- C# 类教程-继承
- C# 类教程-继承:方法重载
- C# 类教程-继承:隐藏(new)
- C# 类教程-继承:重写(virtual 与 override)
- C# 类教程-继承:抽象(abstract)
- C# 类教程-多态性
重写又称覆盖、改写。
我们推荐您阅读同名文章:new、virtual、override、abstract 等-覆盖(改写、重写),其总结性更强。
- 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 "这是重写了的方法。";
}
}
可以看出,重写与前面讲的重载是有区别的,其区别将在下一节中一并列出。
- C# 类教程-类
- C# 类教程-类成员:字段(域)、属性、索引
- C# 类教程-类成员:方法、事件
- C# 类教程-类成员:运算符重载与索引器
- C# 类教程-类成员:构造函数和析构函数
- C# 类教程-类成员:嵌套类型
- C# 类教程-访问修饰符与可访问性级别
- C# 类教程-继承
- C# 类教程-继承:方法重载
- C# 类教程-继承:隐藏(new)
- C# 类教程-继承:重写(virtual 与 override)
- C# 类教程-继承:抽象(abstract)
- C# 类教程-多态性