这个在 C# 中的名称是什么?

What is the name of this in C#?

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

BaseClass foo = new BaseClass();

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

MiClass foo = new DerivedClass();

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

这个术语是 subtyping,或替换。

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

这就是为什么您在处理 类 时可能经常听到 inheritance denotes an is-a relationship. Compare with composition (the practice of including an object as a member of another object), which denotes a has-a relationship (and is the other way of achieving code reuse

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

class Banana : Fruit { ... }

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

Banana obj = new Banana();

但你也这样做了:

Fruit obj = new Banana();

只要字段或方法参数需要 Fruit.

,您就可以做类似的事情

当您希望代码的某些部分使用某个对象,但不希望它们了解有关该对象的太多详细信息(可能是因为这些详细信息不相关或可能会更改)时,这种类型的关系很有用.如果这些部分可以使用不太具体的信息来完成它们的工作(在这种情况下,对象是某种 Fruit 而不是特定的 Banana 的事实),那么最好让它们使用那个.这是 decoupling 的一种形式,随着项目变得越来越复杂,通常需要 属性 代码。