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

本文关键字:泛型接口 继承 类型参数 | 更新日期: 2023-09-27 17:59:40

代码说明了一切:

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

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

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

是的,有几个想法:

  • 你们肯定不能做你们想做的事情。编译器已经明确表示
  • 你当然不应该做你想做的事情。Generictype-less行为的继承。实现两个相同类型的type-full通用接口是没有任何意义的
  • 您没有提出您试图解决的原始问题。如果你这样做,我们也许可以帮助你设计

更新

它们不是同一种,一种是g,另一个是g。想想看关于IMessageHandler和类中的IMessageHandler同时实现Handle(MessageA)和句柄(消息B)

在现实世界中,你不会那样做。它还可能导致许多问题。假设我们有:

interface IFactory<T>
{
   T Create();
}

然后如果我实现两个:

class DontDoIt : IFactory<A>, IFactory<B>
{
    A Create();
    B Create(); // won't compile
}

这将不会编译,因为方法仅在返回类型上不同。现在,您也许可以通过显式实现接口来克服它,但正如我所说的,从设计原则来看,这是没有意义的