2011-11-22 11 views
11

可能性の重複:メソッドのオーバーロードと、null値

Method(null); 
0:私は呼び出ししようとすると

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


C#: Passing null to overloaded method - which method is called?

これらの2つの方法を考えてみましょうVisual Studio 2008 SP1の

私はint[]を取得します。

これはなぜですか?

+3

コンパイラがそのオーバーロードを好む理由を尋ねているかもしれません。 – Vlad

+0

彼の質問はなぜオブジェクトを取るよりむしろint配列を取るメソッドにnullを解決するオーバーロードの解像度です。 –

+1

この質問を参照してください:http://stackoverflow.com/q/719546/25727 – Jan

答えて

11

これは過負荷の分解能です。あなたの議論、nullは、objectint[]の両方に変換可能です。したがって、int[]objectより具体的であるため、コンパイラは最も特殊なバージョンを選択します。

+5

+1:「より具体的に」は「int []」は暗黙的に 'オブジェクト'にキャストできますが、 'オブジェクト'は暗黙的に 'int []'にキャストできません。 – StriplingWarrior

1

int []はobjectよりも具体的であるため、object-parameterを持つメソッドは無視されます。 Method( "Some string")を呼び出すと、object-parameterを持つメソッドが呼び出されます。

関連する問題