【问题标题】:Which class is being used here? C# [closed]这里使用的是哪个类? C# [关闭]
【发布时间】:2016-02-01 22:17:41
【问题描述】:

如果我有一个基类“Base”和一个派生类“Derived”,那么其中哪一个可以?

Base b = new Base();
Derived d = new Derived();

(上面两行就可以了)

Base b = new Derived();
Derived d = new Base();

它们有什么意义吗?

【问题讨论】:

  • 您不能将基实例分配给派生类型的变量。其他一切都有效。
  • 所有的牛都是动物,但并非所有的动物都是牛。
  • 我强烈建议搜索并阅读多态性教程,这个问题的完整答案太宽泛,无法放入简单的问答中,简单的“是的,xyz 没问题”显然是也不会帮助你那么多。
  • 你为什么不简单地尝试一下?然后在这里发布问题会更快。如果您需要文档,请参阅以下关闭原因:“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件”

标签: c# instantiation


【解决方案1】:

@Zuzlx 的评论很到位:

所有的牛都是动物,但不是所有的动物都是牛。

Base换成Animal,把Derived换成Cow,会清晰很多:

Animal a = new Cow();  // This works since a cow is always an animal.
Cow c = new Animal();  // Just won't work.

【讨论】:

  • “Animal a = new Cow();”是否创建了 Cow 或 Animal 类的实例?
  • 它创建了Cow 类的一个实例,但您只能将它作为Animal 类引用,这意味着您只能访问Animal 提供的成员/方法。如果你需要访问Cow特定的成员/方法,你需要将cast它回Cow
猜你喜欢
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
相关资源
最近更新 更多