[英]How to make a list of something that implements abstract class and interface (C#)?
假设我有Tanks,Airplanes和许多其他东西的列表,它们实现的常见的东西是IHaveLocation,它是抽象类,IHaveColor是一个接口。
我想列出它们,因为我需要在这两个接口的基础上查询列表。
我该怎么做 ?
这有什么诀窍吗?
我想制作类似List<IHaveLocation and IHaveColor>
您可以将此包装在具有两种类型约束的泛型类中:
public class YourClass<T> where T : IHaveLocation, IHaveColor
{
List<T> items = new List<T>;
public void Add(T item)
{
items.Add(item);
}
// ...
}
然后,此类中的方法可以根据需要使用这两个接口,因为类型可以保证实现它们。
正如我在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);
当然,缺点是您要将对象存储两次。 如果您不喜欢这样,那么您当然可以将列表的内部存储更改为对象或仅其中一个接口。
你可以尝试类似的东西:
public class YourClass<T> where T : Ihavelocation, ihavecolor{
List<T> items = new List<T>;
public void Add(T item){
items.Add(item);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.