2009-04-04 6 views
11

सी # एक्सटेंशन विधि का पहला पैरामीटर उदाहरण है कि एक्सटेंशन विधि को कॉल किया गया था। मैंने उस परिवर्तनीय "स्वयं" को बुलाए जाने के अलावा इसे कहीं और देखे बिना एक मुहावरे को अपनाया है। अगर मैं दूसरों का भी उपयोग कर रहा हूं तो मैं आश्चर्यचकित नहीं होगा। यहाँ एक उदाहरण है:सी # में एक्सटेंशन विधियों के लिए "यह" पैरामीटर नाम देने के लिए आप क्या idiom (यदि कोई हैं) पसंद करते हैं, और क्यों?

public static void Print(this string @this) 
{ 
    if(@this != null) Console.WriteLine(@this); 
} 

और एक 3 विकल्प के रूप में, कुछ नहीं मुहावरा बिल्कुल पसंद करते हैं:

public static void Print(this string self) 
{ 
    if(self != null) Console.WriteLine(self); 
} 

हालांकि, मैं, देखने के लिए अन्य लोगों का नाम है कि पैरामीटर "@this" इस प्रकार शुरू कर , कह रहे हैं कि "स्वयं" और "@ थीसिस" कोई जानकारी नहीं देते हैं। मुझे लगता है कि हम सभी सहमत हैं कि कभी-कभी पैरामीटर के लिए एक स्पष्ट, सार्थक नाम है, जो इसके उद्देश्य के लिए विशिष्ट है, जो "स्वयं" या "@ थीस" से बेहतर है। कुछ आगे जाते हैं और कहते हैं कि आप हमेशा अधिक मूल्यवान नाम के साथ आ सकते हैं। तो यह एक और मान्य दृष्टिकोण है।

आपने अन्य मुहावरे क्या देखा है? आप क्या मुहावरे पसंद करते हैं, और क्यों?

उत्तर

3

मैंने ओबीजे और वैल का उपयोग किया है। मुझे ये पसंद नहीं। हमें कीवर्ड का उपयोग करने से बचने की कोशिश करनी चाहिए। मैंने स्वयं को कभी नहीं देखा है लेकिन मुझे यह पसंद है।

+0

मैं एबोटू से कीवर्ड से दूर शर्मिंदा होने के लिए सहमत हूं। –

+0

@ यह एक कीवर्ड नहीं है। –

+0

आप कीवर्ड से बचने के लिए @ का उपयोग करते हैं यह एक कीवर्ड है। – JoshBerke

1

आप कुछ इस तरह कर सकता है ...

public static void Print(this string extended) 
{ 
    if(extended != null) Console.WriteLine(extended); 
} 
+0

नहीं आप नहीं कर सके :) क्या आप लगातार "@ थीसिस" या "विस्तारित" का उपयोग करना चाहते थे? –

+0

वह सिर्फ यह बता रहा है कि आपके पास एक टाइपो है। एक स्थान पर आप अभी भी "@ थीस" का उपयोग करते हैं और दूसरे में, आप "विस्तारित" का उपयोग करते हैं। –

+0

पकड़ के लिए धन्यवाद ... – bytebender

16

मैं यह काफी सामान्य रूप से नाम, उपयोग के आधार पर। इसलिए LINQ ऑपरेटर के स्रोत अनुक्रम के लिए "स्रोत", या पैरामीटर/तर्क जांच आदि के विस्तार के लिए "तर्क"/"पैरामीटर"

मुझे नहीं लगता कि इसे विशेष रूप से " "या" स्वयं "- जो पैरामीटर के अर्थ के बारे में कोई अतिरिक्त जानकारी नहीं देता है। निश्चित रूप से यह सबसे महत्वपूर्ण बात है।

संपादित करें: यहां तक ​​कि इस मामले में जहां वहाँ स्पष्ट अर्थ का एक बहुत नहीं है, मैं कुछ पसंद करते हैं कोई भी अर्थ होता। "स्वयं" या "@ थीस" द्वारा कौन सी जानकारी प्रदान की जाती है? केवल एक विस्तार विधि में यह पहला पैरामीटर है - और यह जानकारी पहले से ही इस तथ्य से स्पष्ट है कि पैरामीटर this से सजाया गया है। उदाहरण के मामले में जहां theStringToPrint/self विकल्प दिया गया है, मैं इसके बजाय outputText का उपयोग करूंगा - यह पैरामीटर, आईएमओ के बारे में जानने के लिए आवश्यक सब कुछ बताता है।

+0

कई मामलों में, मैं आपसे सहमत हूं। लेकिन अक्सर एक विस्तार विधि इतनी सामान्य है कि "theStringToPrint" जैसी किसी चीज़ से बेहतर नाम नहीं है। मैं इन 2 मामलों के बीच भेद बनाने के लिए अपनी पोस्ट संपादित करूंगा। –

+0

मैं भी उस उत्तर को कवर करने के लिए अपना उत्तर संपादित करूंगा :) –

+0

कूल। मैं नहीं कह सकता कि मैं आश्वस्त हूं, लेकिन आपके पास निश्चित रूप से एक उचित दृष्टिकोण है। मुझे पता है कि मैंने विस्तार तरीकों को दोनों तरीकों से लिखा है। जब एक सार्थक नाम होता है तो मैं इसका उपयोग करता हूं। लेकिन ऐसे कई मामले हैं जहां मुझे लगता है कि मैं सबसे अच्छी जानकारी दे सकता हूं कि यह "स्वयं की तरह" पैरामीटर है। –

2

मैं इसे 'लक्ष्य' कहता हूं, क्योंकि विस्तार विधि उस पैरामीटर पर काम करेगी।

+0

हां! यूनिट परीक्षणों के समान, यह ऑपरेटिंग विधि का लक्ष्य है। अधिकांश विधियों में सटीक "लक्ष्य" नहीं होता है, जिसका स्पष्ट रूप से उद्देश्य होता है, लेकिन यूनिट परीक्षण और स्थैतिक विधियां होती हैं। विधि का पूरा उद्देश्य यह है कि एक वस्तु है ताकि विधि का लक्ष्य हो। –

2

मेरा मानना ​​है कि @ टाइट से बचा जाना चाहिए क्योंकि यह अब तक की सबसे बेकार भाषा-विशिष्ट सुविधा का उपयोग करता है (@)। असल में, कुछ भी जो भ्रम पैदा कर सकता है या पठनीयता को कम कर सकता है जैसे कीवर्ड दिखाना जहां वे कीवर्ड नहीं हैं, से बचा जाना चाहिए। स्वयं मुझे पाइथन की याद दिलाता है लेकिन एक सतत नामकरण सम्मेलन के लिए अच्छा हो सकता है क्योंकि यह स्पष्ट है कि यह उपयोग में उदाहरण का जिक्र कर रहा है, जबकि कुछ गंदा वाक्य रचनात्मक चालबाजी की आवश्यकता नहीं है।

4

मैं परिवर्तनीय नाम का नाम देता हूं कि अगर मैं एक सादे पुरानी स्थैतिक विधि थी तो मैं इसे कैसे नाम दूंगा। इसका कारण यह है कि इसे अभी भी स्थिर विधि के रूप में बुलाया जा सकता है और आपको उस कोड का उपयोग करना चाहिए जो आपके कोड में है।

यह देखने का सबसे आसान तरीका तर्क सत्यापन है।उस मामले पर विचार करें जहां आपकी विधि में शून्य पास हो जाती है। आपको बहस की जांच करनी चाहिए और एक ArgumentNullException फेंकना चाहिए। यदि इसे सही तरीके से कार्यान्वित किया गया है तो आपको "इस" को तर्क नाम के रूप में रखना होगा।

public static void Print(this string @this) { 
    if (null == @this) { 
    throw new ArgumentNullException("this"); 
    } 
    ... 
} 

अब कोई आपकी लाइब्रेरी के खिलाफ कोडिंग कर रहा है और अचानक एक अपवाद संवाद मिलता है जो कहता है "यह शून्य है"। वे सबसे उलझन में होंगे :)

यह एक संक्षिप्त उदाहरण है, लेकिन आम तौर पर मैं विस्तार विधियों का इलाज करता हूं जो कि एक पुरानी पुरानी स्थिर विधि नहीं है। मुझे लगता है कि यह उन्हें कारण बनाना आसान बनाता है।

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

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