C#几对修饰符的比较(二)override与new

override和new都是用于实现多态的修饰符。

貌似比较通用的译法分别是重写和覆盖,也有分别叫覆盖和隐藏的。个人更倾向于前一种译法,不过也不用在这太纠结。

  • 用法上,二者的区别在于:

    override专用于虚拟(virtual)方法、抽象(abstract)方法和接口(interface),不能用于实方法;
    而new则用于实方法,也可用于虚拟方法,但不能用于抽象方法和接口。

  • 表现上,二者的区别在于:

    当用子类创建父类,然后调用子类多态过的父类功能时。
    通过override实现多态的功能会调用子类;
    而通过new实现多态的功能仍会调用父类。

代码示例:

参考

使用 Override 和 New 关键字进行版本控制(C# 编程指南)

C#中重写(override)和覆盖(new)的区别

C#方法重载(overload)方法重写(override)隐藏(new)

发表评论

电子邮件地址不会被公开。 必填项已用*标注