2011-11-22 15 views
11

Powiel możliwe:
C#: Passing null to overloaded method - which method is called?Metoda przeciążenia i wartość zerowa

Rozważmy te 2 metod:

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

gdy próbuję wywołanie:

Method(null); 

w Visual Studio 2008 SP1 Otrzymuję int[].

Dlaczego tak jest?

+3

Być może pyta, dlaczego kompilator faworyzuje to przeciążenie. – Vlad

+0

Jego pytanie brzmi: dlaczego rozdzielczość przeciążenia rozwiązuje wartość null dla metody, która pobiera tablicę int, a nie tę, która przyjmuje obiekt. –

+1

Zobacz to pytanie: http://stackoverflow.com/q/719546/25727 – Jan

Odpowiedz

11

Jest to produkt o przeciążeniowej rozdzielczości. Twoja argumentacja, null, może być przekształcana zarówno w object, jak i int[]. Dlatego kompilator wybiera najbardziej szczegółową wersję, ponieważ int[] jest bardziej specyficzny niż object.

+5

+1: "Bardziej konkretny" jest zdefiniowany jako "an" int [] 'może być niejawnie rzutowany na' obiekt', ale 'obiekt' nie może być niejawnie rzutowany na' int [] '." – StriplingWarrior

1

Ponieważ int [] jest bardziej szczegółowe niż obiekt, metoda z parametrem obiektu zostanie zignorowana. Jeśli chcesz wywołać Method ("Some string"), zostanie wywołana metoda z parametrem object.

Powiązane problemy