2011-11-22 14 views
11

Duplicar posible:
C#: Passing null to overloaded method - which method is called?sobrecarga de métodos y de valor nulo

Considere estos 2 métodos:

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

Cuando intento llamar:

Method(null); 

en Visual Studio 2008 SP1 obtengo int[].

¿Por qué es esto?

+3

Él podría estar preguntando por qué el compilador favorece esa sobrecarga. – Vlad

+0

Su pregunta es por qué la resolución de sobrecarga resuelve nulo para el método que toma una matriz int en lugar de la que toma el objeto. –

+1

Consulte esta pregunta: http://stackoverflow.com/q/719546/25727 – Jan

Respuesta

11

Es un producto de resolución de sobrecarga. Su argumento, null, es convertible a object y int[]. Por lo tanto, el compilador elige la versión más específica, porque int[] es más específico que object.

+5

+1: se define "Más específico" como "an' int [] 'se puede convertir implícitamente en un' objeto', pero un 'objeto' no se puede convertir implícitamente a' int [] '." – StriplingWarrior

1

Como int [] es más específico que el objeto, se ignorará el método con el parámetro de objeto. Si llama al método ("Some string"), se llamará al método con el parámetro object.

Cuestiones relacionadas