我试图通过MSDN理解这些关键字,但每一个绑在另一个... 有人可以向我解释他们的意思吗?C#:基地,虚拟和覆盖
1
A
回答
4
刚才看了一下,记录自己;-)
The C# Station Tutorial-Lesson 9: Polymorphism
base
是你通常所说的基类中的方法,在Java中称为super
如果我没看错的。
所以当你写一个方法base.Name
时,你会得到你的类继承/派生的基类的Name
属性。
5
基
这是一种语言的关键字被用于指代基类,当前一个由(延伸)继承的类。当您创建扩展另一个类的实例时,该实例也可以作为基类来处理或使用。
虚拟
这意味着性质或功能可以在延伸类中重写(类从基类定义性质或功能继承)一种功能或性质改性剂。重写函数或属性必须与原始定义具有相同的签名,但可以更改实现。虚拟函数或属性必须立即在其定义的类中实现,而抽象方法或属性仅在扩展类中实现。
倍率
用于指示就下面的功能或性质或延伸覆盖从基类的等效功能或性质的编译器的功能或性质改性剂。
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
相关问题
- 1. 演员派生虚拟覆盖基地纯虚拟成员
- 2. C++虚拟方法覆盖
- 3. C#虚拟内部工作和覆盖
- 4. C#虚拟&覆盖关键字
- 5. 虚拟方法覆盖在C++
- 6. C#继承虚拟或覆盖
- 7. 覆盖C++中的非虚拟继承
- 8. 覆盖C++的虚拟方法
- 9. 了解虚拟/覆盖
- 10. 覆盖非虚拟方法?
- 11. 覆盖和隐藏虚拟功能
- 12. 虚拟,覆盖,新和密封覆盖之间的区别
- 13. 安全地覆盖C++虚函数
- 14. C#继承 - 为什么使用覆盖和虚拟?
- 15. 内部工作的虚拟和覆盖在C#中?
- 16. C++成员函数的虚拟覆盖和过载,同时
- 17. 覆盖虚拟功能到非虚拟功能可以吗?
- 18. 用纯虚拟覆盖虚拟..是否可以?
- 19. Castle.ActiveRecord如何覆盖虚拟属性?
- 20. 如何覆盖非虚拟方法?
- 21. 使用虚拟覆盖方法签名
- 22. 覆盖Object的虚拟方法
- 23. 覆盖合格的虚拟方法
- 24. 虚拟方法未被覆盖?
- 25. html链接覆盖虚拟路径
- 26. 覆盖非虚拟功能和虚拟功能有什么区别?
- 27. “C#基类虚函数” - “在托管C++ ref类中覆盖”
- 28. 虚拟函数是否覆盖基类中同名的非虚函数?
- 29. 覆盖和C#
- 30. C# - 为什么虚拟函数不能覆盖抽象函数?