代码说明了一切:
interface a { }
interface ab : a { }
interface ac : a { }
interface igeneric<T> { }
//this is OK
class Clazz : igeneric<ab>, igeneric<ac>
{
}
//compiler error : 'Clazz2<T>' cannot implement both '<ac>' and 'igeneric<T>' because they may unify for some type parameter substitutions
class Clazz2<T> : igeneric<T>, igeneric<ac> where T : ab
{
}
有什么想法吗?解决方法?
答案 0 :(得分:3)
是的,一些想法:
Generic
是type-less
行为的继承。实现2个type-full
相同类型的通用接口没有任何意义。他们不是同一种,一种是 g和另一个是g。认为 关于IMessageHandler和 IMessageHandler,在课堂上 实现Handle(MessageA)和 处理(MessageB)
在现实世界中,你不会这样做。它也可能导致许多问题。假设我们有:
interface IFactory<T>
{
T Create();
}
然后,如果我实施两个:
class DontDoIt : IFactory<A>, IFactory<B>
{
A Create();
B Create(); // won't compile
}
由于方法仅在返回类型中有所不同,因此无法编译。现在你可以通过明确地实现接口来克服它,但正如我所说它只是从设计原则中没有意义。