C# 泛型问题 - 泛型接口约束

5
假设我有一个基本接口,使用泛型进行驱动:
public interface Inteface<T> {
   void Foo(T t);
}

现在我有了一些具体的实现,这些实现也是泛型的:

public class InterfaceImpl<T> {
   public void Foo(T t) {
      // Whatever
   }
}

这个看起来还可以,但现在假设我有另一个类:

public class Ololo {
   public void BadFunction<TShouldModelInterface>(TShouldModelInterface shouldModelInterface) {
      // Whatever
   }
}

假设我想执行一个检查,看看 TShouldModelInterface 是否实际实现了任何可能的 Interface<T>
如果接口不是泛型的,我可以简单地编写类似于 where TShouldModelInterface : Interface 的内容。
但是,如果接口被声明为 Interface<T>,有没有解决这个问题的方法呢?

1
我稍微修改了你的标题,使其不那么通用。 - Daniel Mošmondor
@Daniel 哈哈哈.. 确实不那么“通用”。 - Yippie-Ki-Yay
在你的例子中,“InterfaceImpl<T>”没有实现“Inteface<T>”(顺便提一下,缺少了一个“r”)。你应该将其声明为“public class InterfaceImpl<T> : Inteface<T>”。 - Yann Trevin
1个回答

8
public class Ololo {
   public void BadFunction<TShouldModelInterface, T>(TShouldModelInterface shouldModelInterface)
       where TShouldModelInterface : Interface<T>
   {
      // Whatever
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接