【发布时间】:2016-10-26 14:42:58
【问题描述】:
考虑一个名为 Fruit 的类和一个名为 FruitStand 的类,该类包含一个通用的水果列表并公开一个属性(内容)以获取水果列表,以便在类中迭代水果。
现在我想创建一个 Apple 类,它是 Fruit 的子类,我想要一个名为 AppleCart 的类,它是 FruitStand 的子类。 AppleCart 中通用 List 的内容将永远只包含 Apple 类的实例。我想要的是能够让 AppleCart 的消费者不必将 Contents 属性返回的元素从 Fruit 转换为 Apple。
我希望这是一件简单的事情,我只是精神障碍。
【问题讨论】:
-
如果 AppleCart 只能包含 Apples,为什么还要强制转换它?
-
与其继承自 FruitStand 的 AppleCart,或许一个接口(例如
IFruitVendor(of T))可以满足您的需求。 -
因为超类 (FruitStand) 返回一个水果列表,而不是一个苹果列表。因此,消费者必须将从枚举器返回的 Fruit 转换为 Apple 以访问特定于 Apple 的属性。 Apple Cart 仅包含 Apple,因为它确保仅将 Apple 添加到列表中。
-
我想到了类似 IFruitVendor 的东西,但我希望 FruitStand 的逻辑成为类的一部分,并且不需要在两个类中复制。问题是 AppleCart 仍然是一个 FruitStand,只是增加了一些功能 - 而不是不同的功能。
-
AppleCart 只有在没有覆盖/重载返回项目的方法时才会返回 Fruit。它们显然是通过 AppleCart 方法进入水果箱的,如果它们以相同的方式出来,它们就是苹果
标签: vb.net list subclass generic-list