所以这两个方法具有相同的签名但不同的约束
public static void Method<T>(ref T variable) where T : struct { }
public static void Method<T>(ref T variable) where T : class { }
但是它们不能在单个类中定义,因为它们具有相同的签名。但在这种特殊情况下,它们是相互排斥的。 (除非我错了)
我知道您可以在class
和struct
之外添加其他约束,但不能在同一方法上同时指定struct
和class
。那为什么不能编译?
答案 0 :(得分:10)
generic constraints are not considered part of the method signature(感谢@Anthony链接)。
就编译器而言,你有一个重复的方法 - 相同数量和类型的参数。
答案 1 :(得分:4)
它们在语义上是相互排斥的,是的。但编译器认为它们具有相同的“名称”,因此存在歧义。 “姓名”在这里意为“方法签名”。
答案 2 :(得分:4)
尽管编译器可以足够聪明地解决它(看起来不是这样),但你不知道该怎么做object
(因为它可能是class
或{{1 }})。