c# – 是否可以定义实现多个接口的任何类型的列表?

考虑下面的类层次结构:

public interface X { void Foo(); }

public interface Y { void Bar(); }

public class A : X, Y
{
    public void Foo() {}
    public void Bar() {}
}

public class B : X, Y
{
    public void Foo() {}
    public void Bar() {}
}

有什么办法可以定义一个可以包含A和B的列表(或任何类型的通用类型),同时允许我将列表的内容视为X和Y?即这将允许我按照这样的方式写一些东西:

var list = ???
list.Add(new A());
list.Add(new B());
list.First().Foo();
list.Last().Bar();

编辑

只是为了澄清,我目前正在处理的类型是ObservableCollection<T>(A)和ReadOnlyObservableCollection<T>(B),其中我感兴趣的接口是IList< T> (X)和INotifyCollectionChanged(Y).显然,我无法改变他们的类层次结构以适应我的需要,所以我需要一个不同的解决方法.

最佳答案
否,除非你声明另一个界面:

IAB : IA, IB {}

并使两个类实现它.

您也可以实现自己的集合类,像List< IFirst,ISecond>这样就可以实现.

转载注明原文:c# – 是否可以定义实现多个接口的任何类型的列表? - 代码日志