是否存在任何类型安全的编译时检查可能性是否引用实现多个接口的值?在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