2013-02-12 98 views
10

क्या निम्नलिखित स्थिति के लिए सी # (या किसी ऑब्जेक्ट उन्मुख भाषा जो विधि अधिभार का समर्थन करता है) में कोई भी प्रकार का सम्मेलन है?क्या कोई सी # विधि अधिभार पैरामीटर ऑर्डरिंग सम्मेलन है?

चलें कहते हैं कि मैं एक विधि foo है:

public void Foo(int a){//does stuff} 

लेकिन असल में मैं 3 तरीकों foo है:

public void Foo(int a){} 
public void Foo(int a, double b){} 
public void Foo(float c, int a, double b){} 

वहाँ एक सम्मेलन एक में कहा गया है कि क्या है या नहीं मानकों का क्रम महत्वपूर्ण है अधिभारित विधि? ध्यान दें कि कैसे तीसरी विधि एक स्पष्ट तार्किक प्रगति नहीं है (ए, बी, सी)।

+1

यदि 'ए' हमेशा आवश्यक है, और' सी' प्रदान किए जाने पर 'बी' की आवश्यकता है, तो मैं ऐसा कुछ करूंगा: 'सार्वजनिक शून्य फू (int a, double? B = null, float? C = null) '- मानते हुए कि आपका तर्क समान है। – zimdanen

+0

@zimdanen, पैराम को – Maxwe11

+5

@ ज्यूपिटर बनाने का कोई कारण नहीं है: विचार यह है कि ओवरलोड के विकल्प के रूप में इसका उपयोग करना है। यह बहुत अच्छा काम करता है जब कई पैरामीटर होते हैं जिनमें से सभी स्वतंत्र होते हैं - आप हर बार जब भी आप जोड़ते हैं तो ओवरलोड की संख्या को दोगुना करने से बचें। (माना जाता है कि एक बार जब आप लगभग 5 पैरामीटर प्राप्त कर लेते हैं तो आपको वास्तव में सावधानी से देखना चाहिए कि यह एक उचित डिजाइन है या नहीं ...) –

उत्तर

17

हां वहाँ है। https://msdn.microsoft.com/en-us/library/ms229029(v=vs.110).aspx

ओवरलोडेड सदस्यों में पैरामीटर के क्रम में सुसंगत रहें। समान नाम वाले पैरामीटर सभी अधिभारों में एक ही स्थिति में दिखने चाहिए।

+3

और आगे, आपको केवल एक सामान्य विधि को डिफ़ॉल्ट मान प्रदान करने के प्रयोजनों के लिए विधियों को अधिभारित करना चाहिए। अन्यथा, विधियों को समान नाम रखने के लिए पर्याप्त रूप से पर्याप्त रूप से संबंधित नहीं हैं, और उन्हें अलग-अलग नाम दिए जाने चाहिए। –

1

हालांकि एक विशिष्ट क्रम को बनाए रखने की आवश्यकता नहीं है, लेकिन आमतौर पर पठनीयता के लिए ऐसा करना एक अच्छा विचार है। पैरामीटर का क्रम हालांकि विधि हस्ताक्षर के लिए मायने रखता है। उदाहरण के लिए,

public void DoStuff(int a, bool b, string c) 
{ 

} 

public void DoStuff(bool b, string c, int a) 
{ 

} 

वैध है और, ठीक संकलित भी मानकों की संख्या हालांकि, और यहां तक ​​कि उनके नाम एक ही हैं।

अपडेट: मैं इसे इस तरह से करने की अनुशंसा नहीं करता। यह भ्रम पैदा कर सकता है। मैं बस यह कह रहा था कि यह तकनीकी रूप से मान्य है।

+0

हालांकि यह मान्य है, यह विधि का उपयोग करने वालों के लिए पूरी तरह से भ्रमित होगा। –

+0

बिल्कुल, यही कारण है कि मैंने कहा कि पठनीयता के लिए आदेश बनाए रखना एक अच्छा विचार है। मैं व्यक्तिगत रूप से इस तरह से नहीं करता। मैं सिर्फ रिकॉर्ड के लिए कह रहा था कि पैरामीटर का क्रम विधि के हस्ताक्षर में कारक है। यदि ऐसा नहीं होता है, तो कंपाइलर को अधिभार के बीच अंतर करना कठिन होता है। – sparky68967

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

  • कोई संबंधित समस्या नहीं^_^