C#:基本、虚拟和覆盖

C#:基本、虚拟和覆盖,c#,inheritance,keyword,C#,Inheritance,Keyword,我试图通过MSDN理解这些关键词,但每一个都与另一个联系在一起。。。 有人能给我解释一下他们的意思吗 基地 这是一个语言关键字,用于引用基类,即当前继承(扩展)的类。创建扩展另一个类的类的实例时,该实例也可以作为基类处理或使用 虚拟的 函数或属性修饰符,表示可以在扩展类(从定义属性或函数的基类继承的类)中重写该属性或函数。重写函数或属性必须与原始定义具有相同的签名,但可以更改实现。虚拟函数或属性必须在定义它的类中立即实现,而抽象方法或属性只能在扩展类中实现 凌驾 是一个函数或属性修饰符,用于向编

我试图通过MSDN理解这些关键词,但每一个都与另一个联系在一起。。。 有人能给我解释一下他们的意思吗

基地

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

虚拟的

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

凌驾

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

基地

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

虚拟的

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

凌驾


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

只需阅读一点内容并记录自己;-)

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


因此,当您在方法内部编写
base.Name
时,您将获得您的类从中继承/派生的基类的
Name
属性。

只需阅读一些内容并记录您自己;-)

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

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