是否存在任何類型安全的編譯時檢查可能性是否引用實現多個接口的值?在C#中使用多個接口輸入多態值
鑑於
interface A {
void DoA();
}
interface B {
void DoB();
}
我能夠編寫代碼實現A
或B
,而不是兩個對象。所以我拿出醜陋包裝:
class ABCollection {
private class ABWrapper : A, B {
private readonly A a;
private readonly B b;
public static ABWrapper Create<T>(T x) where T : A, B {
return new ABWrapper { a = x, b = x };
}
public void DoA() {
a.DoA();
}
public void DoB() {
b.DoB();
}
}
private List<ABWrapper> data = new List<ABWrapper>();
public void Add<T>(T val) where T : A, B {
data.Add(ABWrapper.Create(val));
}
}
有沒有竅門,以更直觀地編寫代碼,而不會失去類型安全(運行時類型轉換等)?
E.g.
private List<A and B> ...
編輯:這是不是有特別的列表 - 我只是想給與存儲這樣的價值觀的問題「完整」的例子。我的問題只是如何鍵入兩個接口的組合(如A & B
或A and B
)。
另一個更加有用例如:List<IDrawable & IMovable>
...
分數爲Java泛型(最終)的點。 – 2009-12-10 16:32:26
@mmyers:Java泛型如何在這裏幫助?通配符讓你寫'List <?擴展了A&B>,這很好(而C#不能匹配),但是這是'AND',他想要'OR'。 – 2009-12-10 16:49:16
@PavelMinaev:我不想要或者 - 你給的Java例子正是我正在尋找的東西。 – Dario 2009-12-10 16:50:44