假设我有一堆对象 A, B, C, ... 实现多个接口 I1, I2, I3, ...
我的目标是拥有这样的功能
public void AddObjectThatImplements<T>(object o){
//add o to some data structure that stores objects that implement T
}
public List<T> GetInterfaces<T>(){
//return all T instances from the list of who implements T
}
在每个对象的初始化方法中,我可以将它们的接口添加到任何类型的数据结构中,以帮助使这些功能正常工作。
为了简单起见,所有接口 I1、I2... 都继承自基接口 I0。
如何构建这样的功能?欢迎任何额外的数据结构。
您可以将所有对象存储在
List<object>
中。GetInterfaces
中使用 is 运算符,构建第一个中所有 is T
对象的新列表。
根据文档,is 运算符 为 True,特别是在以下情况下:
- 表达式结果的运行时类型是T。
- 表达式结果的运行时类型派生自类型 T、实现接口 T 或其他隐式引用转换 从它到 T 存在。
我知道它忽略了
T
中的 AddObjectThatImplements
,但它似乎实现了您需要的行为。AddObjectThatImplements
重命名为 AddObject
:
public class Example
{
private List<object> all_objects = new List<object>();
public void AddObject(object o)
{
all_objects.Add(o);
}
public List<T> GetInterfaces<T>()
{
List<T> list = new List<T>();
foreach(object o in all_objects)
{
if (o is T)
{
list.Add((T)o);
}
}
return list;
}
}