2012-06-14 155 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)。

相關問題