这个在 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 的一种形式,随着项目变得越来越复杂,通常需要 属性 代码。
我正在阅读初学者的 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 的一种形式,随着项目变得越来越复杂,通常需要 属性 代码。