C#:base,virtual和override

时间:2011-09-17 12:08:01

标签: c# inheritance keyword

我尝试通过MSDN理解这些关键字,但每一个都绑定到另一个... 有人可以向我解释他们的意思吗?

3 个答案:

答案 0 :(得分:5)

  

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

  

虚拟

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

  

倍率

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

答案 1 :(得分:4)

只需阅读一下并自己记录; - )

The C# Station Tutorial-Lesson 9: Polymorphism

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

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

答案 2 :(得分:2)

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