非泛型接口中的通用方法

3
有“通用接口”和“非通用接口中的通用方法”两种区别,它们之间有没有优劣之分呢?
interface IMyInterface
{
     void MyMethod<T>(T param) where T : class;
}

并且

interface IMyInterface<T>  where T : class
{
   void MyMethod(T param)
}

2
区别就像是泛型类和非泛型类中的泛型方法一样。 - Yeldar Kurmangaliyev
与通用接口实现不同的是,接口应该是通用的,或者使用具体类型。通用方法可以作为通用方法使用,而具体类型可以在运行时定义。 - Fabio
这只取决于你想如何使用该方法和类型。在你的具体示例中几乎没有区别,但在其他情况下,你希望整个对象对同一类型进行操作。坦率地说,你不会经常看到带有通用方法的接口,因为接口通常涉及整个对象。但如果你遇到只想在接口中有一个或多个方法的情况,你可以将它们定义为通用方法,原因与在类中这样做相同。请参阅标记的重复内容以获取更多信息。 - Peter Duniho
1个回答

2
是的,非泛型方法不能强制泛型方法具有特定类型参数。但泛型接口可以。
在你的IMyInterface<T>.MyMethod中,T只能是由IMyInterface<T>使用的完全相同类型。而在IMyInterface.MyMethod中,T可以是任何类型(只要它遵守类型约束T:class)。

感谢您的回答。 - Abi

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