2011-11-22 35 views
11

Olası Çoğalt:
C#: Passing null to overloaded method - which method is called?Yöntem aşırı yükleme ve boş değer

bu 2 yöntemleri düşünün

Method(null); 
0 Visual Studio 2008 SP1'de

Ben int[] olsun. Neden bu

mı?

+3

Derleyicinin neden aşırı yüklenmeyi tercih ettiğini soruyor olabilir. – Vlad

+0

Onun sorusu, aşırı yüklenme çözünürlüğünün niçin nesneyi alandan ziyade bir int dizisini alan yönteme null olarak çözüldüğü sorusudur. –

+1

Bu soruya bakın: http://stackoverflow.com/q/719546/25727 – Jan

cevap

11

Aşırı yük çözünürlüğünün bir ürünüdür. Sizin argümanınız, null, hem object hem de int[]'a dönüştürülebilir. Bu nedenle, derleyici en özel sürümü seçer, çünkü int[], object'dan daha belirgindir.

+5

+1: "Bir" int [] 'olarak tanımlanmış" daha spesifik ", bir" nesneye "dolaylı olarak dökülebilir, ancak bir" nesne ", dolaylı olarak bir" int "türüne dönüştürülemez." – StriplingWarrior

1

int [] nesneden daha özel olduğu için, nesne parametresiyle yöntem yoksayılır. Yöntem ("Bazı dize") çağırırsanız, nesne parametresiyle yöntem çağrılır.