8

所以这两种方法具有相同的签名但不同的约束

public static void Method<T>(ref T variable) where T : struct { }

public static void Method<T>(ref T variable) where T : class { }

但是它们不能在单个类中定义,因为它们具有相同的签名。但在这种特殊情况下,它们是相互排斥的。(除非我错了)

我知道您可以添加额外的约束classstruct但您不能同时指定两者structclass相同的方法。那么为什么编译失败呢?

4

3 回答 3

10

通用约束不被视为方法签名的一部分(感谢@Anthony提供链接)。

就编译器而言,您有一个重复的方法 - 相同数量和类型的参数。

于 2012-06-14T19:39:06.223 回答
4

它们在语义上是互斥的,是的。但是编译器认为它们具有相同的“名称”,因此存在歧义。“名称”在这里的意思是“方法签名”。

于 2012-06-14T19:39:24.457 回答
4

尽管编译器可能足够聪明,可以弄清楚(它似乎不是),但您不知道要做什么object(因为它可以是classstruct)。

于 2012-06-14T19:39:53.680 回答