2011-11-22 12 views
11

संभव डुप्लिकेट: जब मैं बुला की कोशिशविधि ओवरलोडिंग और शून्य मान

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 तरीकों पर विचार करें

Method(null); 
0 विजुअल स्टूडियो 2008 एसपी 1 में

मुझे int[] मिलता है।

यह क्यों है?

+3

वह पूछ सकता है कि संकलक उस अधिभार का समर्थन क्यों करता है। – Vlad

+0

उसका सवाल यह है कि ओवरलोड रिज़ॉल्यूशन उस विधि को शून्य कैसे हल करता है जो ऑब्जेक्ट लेने वाले व्यक्ति के बजाय एक int सरणी लेता है। –

+1

इस प्रश्न को देखें: http://stackoverflow.com/q/719546/25727 – Jan

उत्तर

11

यह अधिभार रिज़ॉल्यूशन का एक उत्पाद है। आपका तर्क, null, object और int[] दोनों में परिवर्तनीय है। इसलिए संकलक सबसे विशिष्ट संस्करण चुनता है, क्योंकि int[]object से अधिक विशिष्ट है।

+5

+1: "एक 'int []' के रूप में परिभाषित किया जा रहा है "अधिक विशिष्ट" को स्पष्ट रूप से' ऑब्जेक्ट 'पर डाला जा सकता है, लेकिन' ऑब्जेक्ट 'को' int ']' पर स्पष्ट रूप से नहीं डाला जा सकता है। – StriplingWarrior

1

क्योंकि int [] वस्तु से अधिक विशिष्ट है, ऑब्जेक्ट-पैरामीटर के साथ विधि को अनदेखा कर दिया जाएगा। यदि आप विधि ("कुछ स्ट्रिंग") को कॉल करेंगे, तो ऑब्जेक्ट-पैरामीटर के साथ विधि को कॉल किया जाएगा।

संबंधित मुद्दे