2012-02-24 11 views
6

यह उचित कोडिंग अभ्यास पर कोई सवाल नहीं है, मैं सिर्फ अर्थशास्त्र के माध्यम से काम कर रहा हूं। कहते हैं कि मैं निम्नलिखित कंस्ट्रक्टर्स देता है ...सी #: वैकल्पिक पैरामीटर और नामांकित तर्कों के साथ कन्स्ट्रक्टर ओवरलोडिंग?

public FooClass(string name = "theFoo") 
{ fooName = name; } 

public FooClass(string name, int num = 7, bool boo = true) : this(name) 
{ fooNum = num; fooBool = boo; } 

यह संभव है thusly नामित तर्कों का उपयोग करने के लिए ...?

FooClass foo1 = new FooClass(num:1); 

// जहाँ मैं केवल एक का नाम तर्क गुजर रहा हूँ, बाकी

की देखभाल या निर्माता FooClass कॉल करने के लिए optionals पर निर्भर (, स्ट्रिंग int, bool) कोई तर्क के साथ? के रूप में में ... नामित और वैकल्पिक तर्क के

FooClass foo2 = new FooClass(); 
+7

इसे कैसे आजमाएं? आपके पास कोड है ... आप मुझे बताते हैं कि यह काम करता है! –

+0

ठीक है, मुझे यह निर्दिष्ट करना चाहिए था कि उदाहरण कोड काम नहीं करता है और मैं जानना चाहता हूं कि इसे कैसे काम करना है। – user1229895

उत्तर

5

उपयोग निम्न तरीकों से अधिभार संकल्प को प्रभावित करता है:

  • एक विधि, इंडेक्सर, या निर्माता निष्पादन के लिए एक उम्मीदवार है इसके मापदंडों के प्रत्येक अगर कॉलिंग कथन में एक ही तर्क के लिए या तो वैकल्पिक या अनुरूप है, नाम या स्थिति के अनुसार, और तर्क को पैरामीटर के प्रकार में परिवर्तित किया जा सकता है।

  • यदि एक से अधिक उम्मीदवार पाए जाते हैं, तो पसंदीदा रूपांतरणों के लिए ओवरलोड रिज़ॉल्यूशन नियम स्पष्ट रूप से निर्दिष्ट तर्कों पर लागू होते हैं। वैकल्पिक पैरामीटर के लिए छोड़े गए तर्कों को नजरअंदाज कर दिया जाता है।

  • यदि दो उम्मीदवारों को समान रूप से अच्छा माना जाता है, वरीयता उस उम्मीदवार को जाती है जिसमें वैकल्पिक पैरामीटर नहीं होते हैं जिसके लिए कॉल में तर्क छोड़े जाते हैं। यह कम पैरामीटर वाले उम्मीदवारों के लिए ओवरलोड रिज़ॉल्यूशन में सामान्य प्राथमिकता का एक परिणाम है।

http://msdn.microsoft.com/en-us/library/dd264739.aspx

+0

मैं समझता हूं कि यह हस्ताक्षर की तुलना करता है, लेकिन क्या आप इसे काम करने के लिए अपना उदाहरण कोड दोहरा सकते हैं? – user1229895

+0

यह कैसे काम नहीं करता है? " क्या यह गलत अधिभार कहता है? क्या यह अपवाद फेंकता है? –

+0

खेद बहुत जल्दी में प्रवेश किया ... तो पहले मामले के लिए, स्पष्ट रूप से एक तर्क सभी optionals अनदेखी कर रहे हैं, कम हस्ताक्षर जिसका परिणाम बताते हुए कहा जा रहा है ... बिना और FooClass साथ अधिभार बुलाने की दूसरे मामले में(), यह मुमकिन नहीं है... तो उत्तर दिया गया है कि छोड़े गए वैकल्पिक तर्कों के साथ नाम का उपयोग करना संभव नहीं है? – user1229895

0

वैकल्पिक पैरामीटर, पैरामीटर सूची के अंत में परिभाषित कर रहे हैं किसी भी आवश्यक पैरामीटर के बाद। यदि कॉलर वैकल्पिक पैरामीटर के उत्तराधिकार में से किसी एक के लिए तर्क प्रदान करता है, तो उसे सभी पिछले वैकल्पिक पैरामीटर के लिए तर्क प्रदान करना होगा। तर्क सूची में अल्पविराम से अलग अंतराल समर्थित नहीं हैं।

इसके अलावा,

एक नामित तर्क स्थितीय तर्क का पालन कर सकते हैं, जैसा कि यहाँ दिखाया। गणना बीएमआई (123, ऊंचाई: 64); हालांकि, एक स्थितित्मक तर्क नामित तर्क का पालन नहीं कर सकता है। निम्न कथन एक संकलक त्रुटि का कारण बनता है। // गणना बीएमआई (वजन: 123, 64);

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