具有相同签名的两种方法的互斥约束

时间:2012-06-14 19:37:27

标签: c#

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

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

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

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

我知道您可以在classstruct之外添加其他约束,但不能在同一方法上同时指定structclass。那为什么不能编译?

3 个答案:

答案 0 :(得分:10)

generic constraints are not considered part of the method signature(感谢@Anthony链接)。

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

答案 1 :(得分:4)

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

答案 2 :(得分:4)

尽管编译器可以足够聪明地解决它(看起来不是这样),但你不知道该怎么做object(因为它可能是class或{{1 }})。