2011-11-22 15 views
11

Eventuali duplicati:
C#: Passing null to overloaded method - which method is called?Metodo sovraccarico e valore nullo

Considerare questi 2 metodi:

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

Quando provo chiama:

Method(null); 

in Visual Studio 2008 SP1 Ottengo int[].

Perché è questo?

+3

Si potrebbe chiedere perché il compilatore favorisce tale sovraccarico. – Vlad

+0

La sua domanda è perché la risoluzione di sovraccarico risolve il problema con il metodo che accetta un array int piuttosto che quello che prende l'oggetto. –

+1

Vedere questa domanda: http://stackoverflow.com/q/719546/25727 – Jan

risposta

11

È un prodotto di risoluzione di sovraccarico. Il tuo argomento, null, è convertibile in entrambi object e int[]. Il compilatore sceglie quindi la versione più specifica, perché int[] è più specifico di object.

+5

+1: "Più specifico" viene definito come "un' int [] 'può essere implicitamente lanciato su un' oggetto', ma un 'oggetto' non può essere gettato implicitamente su un' int [] '." – StriplingWarrior

1

Poiché int [] è più specifico di un oggetto, il metodo con il parametro oggetto verrà ignorato. Se chiamassi Method ("Some string"), verrà chiamato il metodo con il parametro object.

Problemi correlati