2011-11-22 68 views
11

可能重複:
C#: Passing null to overloaded method - which method is called?方法重載和空值

考慮以下2種方法:

void Method(object obj) { Console.WriteLine("object"); } 
void Method(int[] array) { Console.WriteLine("int[]"); } 

當我嘗試打電話:

Method(null); 

在Visual Studio 2008 SP1我得到int[]

這是爲什麼?

+3

他可能會問爲什麼編譯器支持過載。 – Vlad

+0

他的問題是爲什麼重載分辨率解析爲null的方法需要一個int數組而不是採用對象的方法。 –

+1

看到這個問題:http://stackoverflow.com/q/719546/25727 – Jan

回答

11

它是重載分辨率的產物。您的論點null可以轉換爲objectint[]。編譯器因此挑選最具體的版本,因爲int[]object更具體。

+5

+1:定義爲「一個int []」的「更具體」可隱式轉換爲一個「object」,但「object」不能隱式轉換爲「int []」。 – StriplingWarrior

1

因爲int []比對象更具體,所以帶有對象參數的方法將被忽略。如果您要調用Method(「Some string」),則將調用帶有object-parameter的方法。