महत्वपूर्ण अद्यतन (12 अप्रैल, 2016):
यह हमारे ध्यान में लाया गया था कि .NET CoreFX टीम का आंतरिक मानक अंडरस्कोर-नोटेशन का उपयोग करने पर जोर देता है, बिना किसी अंतर्दृष्टि के क्यों। हालाँकि अगर हम नियम # 3 को करीब से देखते हैं तो यह स्पष्ट हो जाता है कि वहाँ , उपसर्गों की एक प्रणाली है _, जो बताती है कि पहले स्थान पर क्यों चुना गया था।t_s__
- हम
_camelCaseआंतरिक और निजी क्षेत्रों के लिए उपयोग करते हैं और जहां संभव हो, आसानी से उपयोग करते हैं। उपसर्ग उदाहरण क्षेत्रों के साथ _, स्थिर क्षेत्रों के साथ s_और थ्रेड स्थिर क्षेत्रों के साथ t_। जब स्थिर क्षेत्रों पर उपयोग किया जाता है, तो (यानी नहीं ) के readonlyबाद आना चाहिए ।staticstatic readonlyreadonly static
this.जब तक बिल्कुल जरूरी न हो हम टालते हैं ।
इसलिए यदि आप कुछ प्रदर्शन क्रिटिकल, मल्टीथ्रेडेड, सिस्टम लेवल कोड पर काम करने वाली .NET CoreFX टीम की तरह हैं , तो यह स्ट्रगल है कि आप:
- उनके कोडिंग मानकों का पालन करें और
- अंडरस्कोर-नोटेशन का उपयोग करें और
- इस उत्तर को आगे न पढ़ें
अन्यथा कृपया पर पढ़ें ...
मूल ANSWER:
आइए पहले इस बात पर सहमत हों कि हम किस बारे में बात कर रहे हैं। सवाल यह है कि अगर हम दृश्यता संशोधक ऐसा करने की अनुमति देते हैं तो हम गैर-स्टैटिक विधियों और किसी वर्ग / उप-वर्ग के रचनाकारों के सदस्यों से कैसे पहुँच सकते हैं।
अंडरस्कोर-अंकन
- सुझाव देता है कि आप निजी क्षेत्रों के नामों में "_" उपसर्ग का उपयोग करते हैं
- यह भी कहता है कि आपको "यह" कभी भी उपयोग नहीं करना चाहिए जब तक कि यह बिल्कुल आवश्यक न हो
इस संकेतन का
- सुझाव है कि आप हमेशा "यह" का उपयोग करें। किसी भी उदाहरण के सदस्य का उपयोग करने के लिए
यह संकेतन क्यों मौजूद है?
क्योंकि यह आप कैसे हैं
- जब वे एक ही नाम साझा करते हैं, तो एक क्षेत्र से एक पैरामीटर के अलावा बताएं
- सुनिश्चित करें कि आप वर्तमान उदाहरण के संदर्भ में काम कर रहे हैं
उदाहरण
public class Demo
{
private String name;
public Demo(String name) {
this.name = name;
}
}
अंडरस्कोर-नोटेशन क्यों मौजूद है?
कुछ लोगों को "यह" लिखना पसंद नहीं है, लेकिन उन्हें अभी भी एक क्षेत्र और एक पैरामीटर को अलग करने का एक तरीका चाहिए, इसलिए वे एक क्षेत्र के सामने "_" का उपयोग करने के लिए सहमत हुए।
उदाहरण
public class Demo
{
private String _name;
public Demo(String name) {
_name = name;
}
}
कोई सोच सकता है कि यह सिर्फ व्यक्तिगत स्वाद की बात है और दोनों तरीके समान रूप से अच्छे / बुरे हैं। हालाँकि कुछ ऐसे पहलू हैं जहाँ यह अंकन अंडरस्कोर-नोटेशन को धड़कता है:
स्पष्टता
- अंडरस्कोर-नोटेशन क्लूटर्स नाम
- यह अंकन नामों को बरकरार रखता है
संज्ञानाात्मक भार
अंडरस्कोर-नोटेशन असंगत है, यह आपको फ़ील्ड को एक विशेष तरीके से व्यवहार करता है, लेकिन आप इसका उपयोग अन्य सदस्यों के साथ नहीं कर सकते हैं, हर बार जब आपको खुद से यह पूछने की ज़रूरत होती है कि आपको एक संपत्ति या फ़ील्ड की आवश्यकता है या नहीं?
यह-संकेतन सुसंगत है, आपको सोचने की ज़रूरत नहीं है, आप किसी भी सदस्य को संदर्भित करने के लिए हमेशा "इस" का उपयोग करते हैं
अद्यतन: जैसा कि बताया गया था कि निम्नलिखित एक फायदा नहीं है
रखरखाव
अंडरस्कोर-नोटेशन की आवश्यकता है कि आप _रिफ्लेक्टिंग करते समय नज़र रखें , एक फ़ील्ड को संपत्ति में बदल दें (निकालें _) या इसके विपरीत ( _)
इस नोटेशन में ऐसी कोई समस्या नहीं है
स्वत: पूर्णता
जब आपको उदाहरण के सदस्यों की सूची देखने की आवश्यकता होती है:
- अंडरस्कोर-नोटेशन आपकी बहुत मदद नहीं करता है, क्योंकि जब आप "_" टाइप करते हैं, तो स्वत: पूर्ण पॉपअप आपको निजी फ़ील्ड दिखाता है और लिंक किए गए असेंबली से उपलब्ध सभी प्रकार बाकी के सदस्यों के साथ मिलाया जाता है
- यह-संकेतन आपको एक स्पष्ट उत्तर देता है, "यह" जो आप देख रहे हैं उसे टाइप करके सदस्यों की सूची और कुछ नहीं
अस्पष्टता
कभी-कभी आपको Intellisense की मदद के बिना कोड से निपटना पड़ता है। उदाहरण के लिए जब आप कोड की समीक्षा करते हैं या स्रोत कोड को ऑनलाइन ब्राउज़ करते हैं।
अंडरस्कोर-संकेतन अस्पष्ट है: जब आप कुछ देखते हैं। पहले से बताएं कि क्या आप नहीं बता सकते हैं कि कुछ एक वर्ग है और कुछ कुछ इसकी स्थिर संपत्ति है ... या शायद कुछ एक मौजूदा उदाहरण संपत्ति है, जिसके पास SomeElse की अपनी संपत्ति है
यह-संकेतन स्पष्ट है: जब आप कुछ देखते हैं। केवल एक स्थिर संपत्ति के साथ एक वर्ग का मतलब कर सकते हैं और जब आप इसे देखते हैं। तो आप किसी भी सदस्य के बारे में कुछ जानते हैं।
एक्सटेंशन के तरीके
आप "यह" का उपयोग किए बिना उदाहरण पर एक्सटेंशन विधियों का उपयोग नहीं कर सकते।
- अंडरस्कोर-नोटेशन के लिए आवश्यक है कि आप "इस" का उपयोग न करें, हालांकि आपके पास जो विस्तार विधियां हैं
- यह-संकेतन आपको हिचकिचाहट से बचाता है, आप हमेशा "यह", अवधि का उपयोग करते हैं।
विजुअल स्टूडियो सपोर्ट
आधिकारिक सिफारिशें
बहुत सारे आधिकारिक दिशानिर्देश जो स्पष्ट रूप से कहते हैं "विशेष रूप से सी # में अंडरस्कोर का उपयोग न करें"