c#:基、虚和覆盖

本文关键字:覆盖 | 更新日期: 2023-09-27 18:08:46

我试着通过MSDN来理解这些关键词,但是每一个都是相互关联的…有人能给我解释一下它们是什么意思吗?

c#:基、虚和覆盖

基地

这是一个语言关键字,用于引用基类,即当前类继承(扩展)的类。当你创建一个类的实例来扩展另一个类时,这个实例也可以被当作基类来对待或使用。

虚拟

一个函数或属性修饰符,意味着该属性或函数可以在扩展类(从定义该属性或函数的基类继承的类)中被重写。重写的函数或属性必须具有与原始定义相同的签名,但可以更改实现。虚函数或属性必须在定义它的类中立即实现,而抽象方法或属性只能在扩展类中实现。

覆盖

是一个函数或属性修饰符,用于向编译器指示下面的函数或属性扩展或覆盖基类中的等效函数或属性。

只要读一点并记录你自己;-)

c# Station教程-第9课:多态性

base是您通常引用基类的方式,如果我没记错的话,在java中称为super

所以当你在一个方法中写base.Name时,你得到的是你的类继承/派生的基类的Name属性

base:当使用在基类型而不是当前类型上定义的成员时使用。

virtual:方法和属性可以是虚拟的,这意味着它们可以被更专门的类覆盖。

override:当一个虚方法在降序类中被一个新的实现覆盖时,你必须使用这个关键字而不是virtual

的例子:

class A {
  public void X() {}
  public virtual void Y() {}
}
class B: A {
  public new void X() {} // defines a new method which does not override A.X
  public override void Y() { // override A.Y with a new implementation
    base.Y(); // calls the A.Y implementation
  }
  public virtual void Z() {} // additional virtual method on B
}
A a = new B();
a.X(); // calls A.X, not B.X
a.Y(); // calls B.Y because it is virtual and overridden
a.Z(); // syntax error - Z does not exist on an instance of type A