C#中的这个名字是什么?

时间:2016-01-13 16:45:52

标签: c# class definition derived

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

BaseClass foo = new BaseClass();

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

MiClass foo = new DerivedClass();

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

1 个答案:

答案 0 :(得分:6)

这个术语是subtyping或替换。

当两种类型具有继承关系时,一种称为子类型,另一种是超类型。如果适用,可以在需要超类型实例的上下文中使用子类型实例(上下文是局部变量,字段,参数等)

这就是为什么您经常会听到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的一种形式,它是代码的一般所需属性,因为项目变得越来越复杂。