【问题标题】:What is the name of this in C#?这个在 C# 中的名称是什么?
【发布时间】:2016-04-18 18:13:09
【问题描述】:

我正在阅读一本初学者的 C# 书籍。像这样定义对象一切都很顺利:

BaseClass foo = new BaseClass();

但后来作者在没有任何解释的情况下改变了这样的定义:

MiClass foo = new DerivedClass();

我想在书本或互联网上了解这一点,但我不知道用什么词来搜索这个主题。

【问题讨论】:

  • 您要查找的术语是“继承”。
  • @GlorinOakenfoot '继承':D
  • @user3646717 你也要在构造函数后面加上(),否则编译不出来。
  • 'subtype polymorphism' 或 'subtyping' 比继承更具体。编辑。被@DanielA.White击败...
  • 暂且不论它实际上是什么或可能是什么,我很确定作者确实在进行更改之前或之后解释了更改。如果他不这样做,那就是一本非常糟糕的书。

标签: c# class definition derived


【解决方案1】:

这个术语是subtyping,或替代。

当两种类型有继承关系时,一种称为subtype,另一种称为supertype。当这适用时,子类型实例可以用在期望超类型实例的上下文中(上下文是局部变量、字段、参数等) .

这就是为什么您可能经常听到inheritance 表示is-a relationship。与composition(包含一个对象作为另一个对象的成员的做法)比较,它表示has-a 关系(并且是在处理类时实现code reuse 的另一种方式) .

回到继承,如果你的类是这样定义的,例如:

class Banana : Fruit { ... }

我们会说Banana(除了是Banana,显然)也是Fruit。由于这种关系,您显然可以这样做:

Banana obj = new Banana();

但你也这样做:

Fruit obj = new Banana();

当字段或方法参数需要 Fruit 时,您可以执行类似的操作。

当您希望部分代码使用某个对象,但又不希望他们知道有关该对象的太多细节(可能是因为这些细节无关紧要或可能更改)时,这种类型的关系很有用。如果这些部分可以用不太具体的信息来完成它们的工作(在这种情况下,对象是某种Fruit 而不是具体的Banana),那么最好让它们使用它。这是decoupling 的一种形式,随着项目变得越来越复杂,它是代码的普遍期望属性。

【讨论】:

  • 谢谢。这本书确实解释了多态性和继承,但从未提及诸如 Fruit obj = new Banana(); 之类的定义。那是我什至不知道如何命名的东西。
猜你喜欢
  • 2015-01-15
  • 1970-01-01
  • 2014-10-03
  • 2017-08-30
  • 1970-01-01
  • 2018-06-04
  • 2011-06-03
  • 2012-03-05
  • 1970-01-01
相关资源
最近更新 更多