从类型参数的泛型接口继承

时间:2011-06-21 09:50:06

标签: c# generics type-parameter

代码说明了一切:

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
{ 
}

有什么想法吗?解决方法?

1 个答案:

答案 0 :(得分:3)

是的,一些想法:

  • 你当然不能做你想做的事。编译器已经明确了
  • 你当然不应该做你想做的事。 Generictype-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
}

由于方法仅在返回类型中有所不同,因此无法编译。现在你可以通过明确地实现接口来克服它,但正如我所说它只是从设计原则中没有意义。

相关问题