【问题标题】:Virtual method refers dynamic or static type? [closed]虚方法是指动态类型还是静态类型? [关闭]
【发布时间】:2014-02-26 09:38:26
【问题描述】:

作为 .NET 的新成员,我想澄清一下:

虚方法是指动态的还是静态的对象类型?

Base myObject = new Derived();
myObject.Foo(); 

调用派生类的Foo()(假设Foo()在Base中是虚拟的,在Derived中被覆盖)?

【问题讨论】:

  • 你能说的更清楚一些吗

标签: c# virtual


【解决方案1】:

你是对的。

这里的术语“静态”和“动态”类型是错误的。这里的所有内容都是静态类型的。

【讨论】:

  • 谢谢。 Base 不是静态类型,而 Derived 不是动态类型吗?
  • 没有。 Base 是基本类型,而 Derived 是派生类型。静态类型和动态类型不同于多态性。
  • 误会了**Base** instance = new _Derived_();,粗体不是静态的,斜体是动态的吗?
  • 没有。您对条款的使用不正确。我建议您查看动态类型、静态类型和多态性。
【解决方案2】:

是的,因为 Foo() 已被覆盖,所以您要调用的是派生类的 Foo()!

我引用MSDN

虚函数是您期望的成员函数 在派生类中重新定义。当您引用派生类对象时 使用指针或对基类的引用,您可以调用 该对象的虚函数并执行派生类的 函数的版本。

【讨论】:

  • 那么动态类型是决定因素吗?如果是Base base = new Base();,会调用 Base 中的 Foo() 吗?谢谢。
  • 是的,如果将对象实例化为Base,就会调用Base中的函数Foo()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 2010-12-02
  • 2011-02-01
  • 2012-10-03
相关资源
最近更新 更多