2012-06-14 97 views
6

Mutally排他性的限制所以这两种方法具有相同签名但不同的约束两种方法具有相同的签名

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

你自己说过,*因为他们有相同的签名*。 –

+0

您是否有解决方法,因为如果您需要它,我已经想到了一个解决方案。 – bluevector

+4

[约束不是签名的一部分。](http://blogs.msdn.com/b/ericlippert/archive/2009/12/10/constraints-are-not-part-of-the-signature.aspx) –

回答

4

它们在语义上是相互排斥的,是的。但编译器认为它们具有相同的“名称”,因此含糊不清。 “名称”在这里表示“方法签名”。

+0

'具有相同的名称,因此含糊不清。 –

+0

@ L.B“名字”是“方法签名”的口语主义我应该更加明确,不要使用手势速记:) – bluevector

2

虽然编译器可以足够聪明,看着办吧(这似乎不是),你不知道要为object做(因为它可以classstruct)。

相关问题