2013-05-10 5 views
5

मैंने ओपन सोर्स सी # कोड पढ़ा है और बहुत अजीब व्याकरण (मेरे लिए) है।सी # भाषा में 'यह' क्या उपयोग किया जाता है?

वे इस कीवर्ड इस प्रकार के साथ विधि तर्क की घोषणा:

@object इस वस्तु इसका क्या अर्थ है?

अगर मैं 'इस' कीवर्ड जहां डेटा प्रकार से पहले है निकालने के लिए, तो यह अलग तरह से काम करेगा?

+3

सी #, बहुत अच्छा व्याकरण, वास्तव में है अगर आप इसे सी की तुलना ++ –

उत्तर

23

एक Extension Method की तरह लगता है।

@ प्रतीक चर नाम एक सी # कीवर्ड के समान होने के लिए अनुमति देता है - मैं उन्हें प्लेग व्यक्तिगत रूप से की तरह से बचने के लिए करते हैं।

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

public static class IntegerMethods 
{ 
    public static int Add(this int i, int value) 
    { 
     return i + value; 
    } 
} 

int i = 0; 

// This is an "extension method" call, and will only compile against extension methods. 
i = i.Add(2); 
// This is a standard static method call. 
i = IntegerMethods.Add(i, 2); 

संकलक बस मानक स्थिर विधि में सभी "विस्तार विधि कॉल" अनुवाद कर देगा किसी भी दर पर कहता है, लेकिन अभी भी विस्तार विधि कॉल केवल होगा this type name वाक्यविन्यास के अनुसार वैध विस्तार विधियों के विरुद्ध काम करें।

कुछ दिशा-निर्देश

ये मेरे अपने हैं, लेकिन मुझे लगता है कि वे उपयोगी होते हैं।

  • विस्तार तरीकों में से खोजे जाने एक समस्या हो सकती है, इसलिए नाम स्थान आप उन्हें में शामिल करने के लिए चुन बारे में सचेत रहें। हम इस तरह System.Collections या जो कुछ भी रूप में नेट नामस्थान के तहत बहुत उपयोगी सामान है। कम उपयोगी लेकिन अन्यथा "सामान्य" सामान Extensions.<namespace of extended type> के तहत जाने लगता है जैसे कि खोज कम से कम सम्मेलन के माध्यम से सुसंगत है।
  • अक्सर इस्तेमाल किया प्रकार का विस्तार करने की कोशिश न करें व्यापक दायरे में, आप नहीं MyFabulousExtensionMethod अपने पूरे एप्लिकेशन object पर दिखने चाहते हैं। यदि आप को की आवश्यकता है, तो या तो स्कोप (नेमस्पेस) बहुत विशिष्ट, या विस्तारित विधियों को बाईपास करें और सीधे स्थिर वर्ग का उपयोग करें - इससे इंटेलिसेन्स में मेटाडेटा प्रकार को प्रदूषित नहीं किया जाएगा।
  • विस्तार विधियों में, "यह" null हो सकता है (वे स्थिर विधि कॉल में कैसे संकलित होते हैं) इसलिए सावधान रहें और यह न मानें कि "यह" शून्य नहीं है (कॉलिंग पक्ष से यह एक सफल विधि की तरह दिखता है एक शून्य लक्ष्य पर कॉल करें)।

ये वैकल्पिक और पूर्ण नहीं हैं, लेकिन मुझे लगता है कि वे आमतौर पर "अच्छी" सलाह के बैनर के अंतर्गत आते हैं। YMMV।

+0

'i' पैरामीटर' को कॉल करने के लिए, मैंने उन्हें उपयोग करने का एकमात्र समय एक्सटेंशन विधियों के लिए है। हालांकि मैं इस निष्कर्ष पर आ रहा हूं कि "बहुत प्यारा" है। –

+0

@ मैथ्यू वाटसन, मैं बस 'यह' पैरामीटर 'स्वयं' कहता हूं। काम करता है। –

+0

'मेह' भी "इस" नाम के रूप में काम करता है ;-) –

4

'इस प्रकार का नाम' वाक्यविन्यास विस्तार विधियों के लिए उपयोग किया जाता है।

उदाहरण के लिए अगर मैं एक स्ट्रिंग (तो मैं "HelloWorld".UnCamelCase() कर सकता है निर्माण करने के लिए "नमस्ते World` करने के लिए एक UnCamelCase विधि जोड़ना चाहते थे - मैं इस बारे में चाहते हैं:

public static string UnCamelCase(this string text) 
{ 
    /*match any instances of a lower case character followed by an upper case 
    * one, and replace them with the same characters with a space between them*/ 
    return Regex.Replace(text, "([a-z])([A-Z])", "$1 $2"); 
} 

this string text का विशिष्ट उदाहरण का मतलब स्ट्रिंग है कि आप के साथ काम कर रहे हैं, और पाठ इसके लिए पहचानकर्ता है।

@ वाक्य रचना चर के नामों का आमतौर पर आरक्षित हैं के लिए अनुमति देता है।

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