假设我有坦克、飞机和许多其他东西的列表,它们实现的共同点是 IHaveLocation 是抽象类,而 IHaveColor 是接口(interface)。
我想列出它们,因为我需要在这两个接口(interface)的基础上查询列表。
我该怎么做 ?
这有什么技巧吗?
我想做类似
List<IHaveLocation and IHaveColor>
的东西 最佳答案
正如我在 Reed 的回答的评论中提到的,您可以使用通用方法来允许您添加 Tank 和 Airplane。像这样的东西:
class TwoTypesList<T1, T2>
{
List<Tuple<T1, T2>> m_list = new List<Tuple<T1,T2>>();
public void Add<ConcreteT>(ConcreteT item) where ConcreteT : T1, T2
{
m_list.Add(Tuple.Create<T1, T2>(item, item));
}
}
那么用法是:
TwoTypesList<IHaveColor, IHaveLocation> list = new TwoTypesList<IHaveColor, IHaveLocation>();
Airplane a = new Airplane();
Tank t = new Tank();
list.Add(a);
list.Add(t);
当然,缺点是您将对象存储两次。如果您不喜欢那样,那么当然可以将列表的内部存储更改为对象或仅其中一个接口(interface)。