【发布时间】:2014-02-26 09:38:26
【问题描述】:
作为 .NET 的新成员,我想澄清一下:
虚方法是指动态的还是静态的对象类型?
Base myObject = new Derived();
myObject.Foo();
调用派生类的Foo()(假设Foo()在Base中是虚拟的,在Derived中被覆盖)?
【问题讨论】:
-
你能说的更清楚一些吗
作为 .NET 的新成员,我想澄清一下:
虚方法是指动态的还是静态的对象类型?
Base myObject = new Derived();
myObject.Foo();
调用派生类的Foo()(假设Foo()在Base中是虚拟的,在Derived中被覆盖)?
【问题讨论】:
你是对的。
这里的术语“静态”和“动态”类型是错误的。这里的所有内容都是静态类型的。
【讨论】:
**Base** instance = new _Derived_();,粗体不是静态的,斜体是动态的吗?
是的,因为 Foo() 已被覆盖,所以您要调用的是派生类的 Foo()!
我引用MSDN
虚函数是您期望的成员函数 在派生类中重新定义。当您引用派生类对象时 使用指针或对基类的引用,您可以调用 该对象的虚函数并执行派生类的 函数的版本。
【讨论】:
Base base = new Base();,会调用 Base 中的 Foo() 吗?谢谢。
Foo()。