2011-03-10 21 views
26

के साथ कॉल कॉल मैंने कई बार नोटिस करना शुरू कर दिया है जब मैं सी # में विधि कॉल कर रहा हूं कि जिस विधि को मैं कॉल कर रहा हूं उसके लिए पैरामीटर के नाम दिखाए गए इंटेलिजेंस सूची में दिखाई देंगे एक कोलन, और उसके बाद मैं विधि कॉल को प्रारूपित कर सकता हूं:सी # विधि कॉलम पैरामीटर नाम और कोलन

MethodCall(parameter1:value1, parameter2:value2); 

क्या यह एक नई भाषा सुविधा है? यह मुझे याद दिलाता है कि आप SQL में संग्रहित प्रक्रियाओं को कॉल कर सकते हैं और पैरामीटर नाम निर्दिष्ट कर सकते हैं:

spDoSomeStuff @param1 = 1, @param2 = 'other param' 

क्या यह एक समान सुविधा है? यदि हां, तो अंत में क्या? यदि नहीं, तो यह क्या है और इसके लिए क्या उपयोग किया जाना है।

उत्तर

31

यह एक नई सुविधा है। यहां देखें: http://msdn.microsoft.com/en-us/library/dd264739.aspx नामित पैरामीटर उदाहरण के लिए ObjectiveC में मानक हैं। उन्हें उपयोग करने में कुछ समय लगता है लेकिन वे एक अच्छी बात है। केवल यह देखने से आप बता सकते हैं कि पैरामीटर का क्या अर्थ है।

+7

मैं होने में मूल्य का एक बहुत देख सकते हैं विधि की परिभाषा पर नेविगेट किए बिना पैरामीटर नाम तुरंत दिखाई देता है या इंटेलिजेंस आपको बताता है कि वे सभी क्या हैं। – Zannjaminderson

16

नाम मापदंडों आप स्पष्ट रूप से एक में तर्क का मान सेट की अनुमति देते हैं हस्ताक्षर से स्वतंत्र कस्टम आदेश। विधि हस्ताक्षर तर्क प्रकार, यानी, फू (int i, bool b) द्वारा परिभाषित किए जाते हैं, जो केवल उस क्रम में int int और bool के तर्क स्वीकार करेंगे। नामांकित तर्क आपको पहले बी पास करने की अनुमति देते हैं और मैं दूसरा।

+1

मैं किसी विधि के हस्ताक्षर की अवधारणा से परिचित हूं और मुझे आश्चर्य हुआ कि क्या यह आपको आपकी कॉल में पैरामीटर के क्रम को बदलने की अनुमति देगा। हालांकि मैं उत्सुक हूं - ऑर्डर बदलने में सक्षम होने का क्या मतलब है? – Zannjaminderson

+1

यह वास्तव में सिर्फ एक कोड "पठनीयता" वरीयता है। विधि हस्ताक्षर स्थिर है जब इसे तर्क कहा जाता है तो उसे विधि हस्ताक्षर में परिभाषित क्रम में ढेर पर रखा जाएगा। "नामांकित तर्क" सुविधा आपको केवल अपनी वरीयताओं के लिए तर्कों को पुनर्व्यवस्थित करने की अनुमति देती है। –

+3

@Zannjaminderson मेरे लिए, वास्तविक मूल्य तब आता है जब आपके पास कई डिफ़ॉल्ट मानों के साथ विधियां होती हैं। यदि आपको केवल उनमें से कुछ को बदलने की आवश्यकता है तो आप उन्हें नामित पैरामीटर का उपयोग करके निकाल सकते हैं। इस तरह आपको उस व्यक्ति से पहले सभी डिफ़ॉल्ट मानों को पुन: स्थापित करने की आवश्यकता नहीं है जिसे आप बदलना चाहते हैं। –

9

यह उल्लेख वैकल्पिक पैरामीटर के विपरीत, आप कुछ तर्क केवल मापदंडों आप में रुचि रखते हैं छोड़ सकते हैं और पारित कर सकते हैं लायक है।

public void Example(int required, string StrVal = "default", int IntVal = 0) 
{ 
    // ... 
} 

public void Test() 
{ 
    // This gives compiler error 
    // Example(1, 10); 

    // This works 
    Example(1, IntVal:10); 
} 
0

@Krumelur ने कहा कि "नाम मापदंडों उदाहरण के लिए ObjectiveC में मानक हैं।"

यह वास्तव में सही नहीं है। ऑब्जेक्टिव-सी एक इन्फ़िक्स संकेतन का उपयोग करता है, ताकि यह संदेश कॉल:

[foo setRed:255 Green:255 Blue:0]; 

है setRed: ग्रीन: ब्लू: (! उन कोलन सहित) (255,255,0) तर्क के साथ संदेश में बीच-बीच में संदेश नाम।

हालांकि, पहले ब्लश उद्देश्य-सी के वाक्यविन्यास में दिया गया है कि उद्देश्य-सी नामित पैरामीटर का उपयोग करता है। लेकिन यह वास्तव में सही नहीं है, और अंतर को गलत समझना उद्देश्य-सी सीखने के लिए एक बाधा हो सकता है।

(मैं एक टिप्पणी में दिए हैं, लेकिन मैं किसी भी तरह मेरे सारे प्रतिष्ठा अंक खो दिया है और मैं से शुरू कर रहा हूँ। Drat। होड़ करना c'est ला।)