आप अपने निजी चर को C # में कैसे नाम देंगे? [बन्द है]


25

सी # में निजी चर के लिए सबसे अच्छा स्वीकार किए जाने वाले नामकरण का सबसे अच्छा अभ्यास क्या है?

  1. private int myInteger;
  2. private int MyInteger;
  3. private int mMyInteger;
  4. private int _myInteger;
  5. private int _MyInteger;
  6. रहस्यमय अन्य विकल्प

आप किसका उपयोग करते हैं और क्यों? (मेरी कंपनी C # के लिए काफी नई है और मैं एक "मानक तरीके से स्वीकार करने के लिए" सबसे अधिक "स्वीकार किए गए उद्योग" पद्धति को चुनना चाहूंगा। "


ऑटो-इंप्लीमेंटेड प्रॉपर्टी का उपयोग क्यों नहीं करते? msdn.microsoft.com/en-us/library/bb384054.aspx
काइल

1
C # के पास इसके मानक हैं, देखें stackoverflow.com/questions/14967/…
ताम्र विजसमैन

7
सार्वजनिक रूप से निजी चर के बारे में बात करना अच्छा नहीं है। क्षमा करें, बस करना था।
मार्क सी

मैं azheglov (m_someVariable) के अपवाद का उपयोग करता हूं, इसके अपवाद के रूप में मैं केवल स्थानीय क्षेत्र के भीतर _someVariable एक विधि का उपयोग करता हूं।
प्रभु-फू

7
@ मेरा मानना ​​है कि विचारोत्तेजक होने के लिए इसे "निजी सदस्य" होना चाहिए।
एप्सिलॉनवेक्टर

जवाबों:


44

MSDN वर्ग डिज़ाइन दिशानिर्देश http://msdn.microsoft.com/en-us/library/ta31s3bc.aspx विकल्प 1 - myInteger की अनुशंसा करता है।

मैंने हमेशा इस शैली का उपयोग किया है। मेरे पास _ चरित्र के लिए एक व्यक्तिगत नापसंद है।


1
मैंने _ चरित्र को नापसंद किया है जब तक कि पुनर्परिभाषित ने मध्य स्ट्रिंग को मेल नहीं खाया। अब मैं टाइप कर सकता हूं myIntegerऔर यह मेल खाएगा _myInteger। लेकिन मुझे नहीं पता था कि MSDS का कहना है कि _
Vaccano

4
यदि आप विकल्प 1 का उपयोग करते हैं, तो मैं कैसे बता सकता हूं कि क्या myIntegerएक विधि के लिए एक चर स्थानीय है, या एक निजी वर्ग का सदस्य है?
जादूगर 47

4
@Lorenzo this.myInteger;)
TWith2Sugars

12
लेकिन लेकिन ... "यह" 4 वर्ण है और "_" केवल एक है! वास्तव में, उस दिशानिर्देश का बहुत मतलब है लेकिन मेरे कार्यालय में हर कोई अंडरस्कोर और नफ़रत करता है, जो भी हो, "इस.फू" को देखकर, जो भी कारण हो। कभी-कभी केवल दिशा-निर्देश ही मायने रखते हैं कि आपके कार्यस्थल की ताकतें आप पर हैं।
कोडेक्सअर्केनम

2
वर्णों की संख्या के बारे में तर्क बहस योग्य है। आपको thisहर बार टाइप करने की ज़रूरत नहीं है , केवल उन तरीकों में जहां एक ही नाम वाला एक स्थानीय चर मौजूद है। हालाँकि, यदि आप किसी अंडरस्कोर का उपयोग करते हैं, तो आपको हर बार एक अतिरिक्त प्रतीक लिखना होगा। इस बात से मैं सहमत हूं कि आपके स्थानीय कोड शैली समझौते पर टिके रहना हमेशा महत्वपूर्ण होता है।
मैल्कम

25

मैं ऊपर # 4 विकल्प का उपयोग करता हूं:

private int _myInteger;

मुझे अपने चर नामों में गुंजाइश के कुछ संकेत देना पसंद है, और उस उद्देश्य के लिए अंडरस्कोर पर्याप्त है। इसे पढ़ना भी काफी आसान है।


5
मैं सहमत नहीं हूं कि यह पढ़ना आसान है, खासकर यदि आपको कई चर के साथ काम करना है।
रेस्टुटा

15

मैं निम्नलिखित नामकरण योजना का उपयोग करता हूं:

  • स्थानीय scoped चर के लिए 1 (myInteger)
  • सार्वजनिक संपत्तियों के लिए दूसरा (MyInteger)
  • निजी चर के लिए 4 (_myInteger)

14

मुझे लगता है कि विकल्प 4 वास्तव में सबसे पठनीय विकल्प है। ऐसा करने से आपको मदद मिलती है:

public Person(string name, int age) 
{
    this.name = name;
    this.age = age;
}

यह सभी निजी सदस्यों को अधिक ध्यान देने योग्य बनाता है। निम्नलिखित उदाहरण में, बिल्ली कहाँ ageसे आ रही है? thisक्वालीफायर के बिना यह बताना कठिन है।

private void Method()
{
    var x = 2;
    var y = age + x;
}

यह समझना आसान है:

private void Method()
{
    var x = 2;
    var y = _age + x;
}

1
मैं आपके पहले उदाहरण की कसम खाता था, लेकिन थोड़ी देर के लिए # 4 विकल्प का प्रयास करने के बाद मैं निजी क्षेत्रों के लिए उपसर्ग के रूप में अंडरस्कोर का उपयोग करना पसंद करता हूं।
जेरेमी वाइबे

2
मैं कहता हूं, निजी चर के लिए 1 का उपयोग करें, गुणों में प्रयुक्त निजी चर के लिए 4 का उपयोग करें।
इवान प्लाइस

2
मुझे ChaosPandoin से असहमत होना है। मेरे लिए, विधि के दोनों कार्यान्वयन () पढ़ना आसान है। जैसे ही मैं आयु चर (या _ज) देखता हूं और ध्यान देता हूं कि यह विधि में घोषित नहीं है, मुझे लगता है कि इसे कक्षा में कहीं और घोषित किया जाना चाहिए। यह क्वालीफायर भयानक है लेकिन कम से कम यह कंस्ट्रक्टर विधि तक ही सीमित है।
डेविड केनेडी

10

सबसे पहले, PascalCasing को आम तौर पर वर्ग के सार्वजनिक गुणों, const, विधियों आदि के लिए आरक्षित किया जाता है। तो मैं 2 और 5 को छोड़ देता।

दूसरा, आयु की शादी को .NET दुनिया में हतोत्साहित किया जाता है, इसलिए (उह, मुझे लगता है) 3 सही है। यह मानते हुए कि 3 के साथ क्या हो रहा है।

जो ऊँटनी के सहारे और कैमकोसिंग से निकलता है। मैं आम तौर पर वर्ग चर के लिए _camelCasing का उपयोग करता हूं, और एक विधि या संकरी के लिए चर चर के लिए सादे पुराने ऊंटनी। ऊंट आवरण विधि तर्कों, संरक्षित / निजी चर नाम और चर के लिए एक विधि या संकरा दायरे में स्वीकृत मानक है।

मैं भी अंडरस्कोर के साथ प्रस्तुत करना पसंद करता हूं ताकि मेरे निजी चर को मेरी अंतर्मुखी में वर्गीकृत किया जाए। हालाँकि, मैं केवल ऐसा करता हूं कि वैरिएबल एक प्रकार से स्कैन किया गया हो। एक विधि या संकीर्ण दायरे के भीतर घोषित चर मैं अंडरस्कोर को छोड़ देता हूं। उन्हें अलग-अलग रखना और कम इस्तेमाल किए जाने वाले चर को एक साथ रखना आसान बनाता है।


2
मुझे समझ में नहीं आता है कि आप वर्ग चर के लिए _camelCasing का उपयोग क्यों करेंगे, क्योंकि आमतौर पर यह स्पष्ट है कि वे वर्ग चर हैं।
वैकल्पिक

1
@ मैथ नं, इंटैलिजेंस में स्पष्ट नहीं है। याद रखें, फ़ील्ड्स (क्लास-स्कोप्ड वैरिएबल्स) में (लगभग) एक ही आइकन होता है, जो मेथड स्कोप किए गए वैरिएबल के समान होता है, इसलिए यदि आप निकट से नहीं देखते हैं तो वे बिल्कुल एक जैसे दिखाई देते हैं। अंडरस्कोर उन्हें नेत्रहीन रूप से अलग करने में मदद करता है और उन्हें एक साथ समूहीकृत करता है, जो अगर आप अक्सर उनका उपयोग नहीं कर रहे हैं (जो आपको राज्य के रूप में बग फ्री प्रोग्रामिंग का दुश्मन नहीं होना चाहिए)।
बंद हुआ

मैंने इन्टेलिसेंस के बारे में कभी कुछ नहीं कहा। मैं Color.ClassMethod () और myColor.InstanceMethod () के बीच अंतर के बारे में बात कर रहा हूं, अर्थात यह स्पष्ट होना चाहिए कि चूंकि Color एक वर्ग है, ClassMethod () एक वर्ग विधि है।
वैकल्पिक

@ तुमसे पहले: I don't understand why you would use _camelCasing for class variables तुम बाद में: I'm talking about the difference between Color.ClassMethod() and myColor.InstanceMethod()मुझे माफ करना, जबकि मैं उलझन में हूँ। सुनो, मैं कक्षा चर का उपयोग शायद ही कभी करता हूं, इसलिए _ को मारकर उनके नामों को याद दिलाया जाना अच्छा लगता है और उन सभी को अच्छा और समूहीकृत किया जाता है।
रवाना

2
@mathepic: जब विल "वर्ग चर" कहता है, तो उसका मतलब (निजी) उदाहरण क्षेत्र हैं। आपको लगता है कि उन्होंने स्थैतिक सदस्यों से जो कुछ भी कहा था, उसकी व्याख्या कर रहे हैं; लेकिन उसने ऐसा नहीं कहा।
दान ताओ

4

private int integer

यदि आप एक विधि दायरे में सदस्य और स्थानीय चर के बीच भ्रमित हो जाते हैं तो आपको शायद रिफ्लेक्टर करने की आवश्यकता है।


+1: यही मेरा मानना ​​है कि बिंदु है। BTW: मैं इसके स्रोत को देखता हूं, लेकिन नाम integerको बेहतर ढंग से प्रतिरूपित किया जा सकता है value?
वुल्फ

2

मेरा मानना ​​है कि इसे करने का सबसे अच्छा तरीका (C # / नेट में वैसे भी) 2 और 6 का संयोजन है:

private int MyInteger { get; set; }

यहाँ पर सैद्धांतिक रूप से कोई चर नहीं है, लेकिन यह एक निजी उदाहरण चर की तरह दिखता है और कार्य करता है। अगर हमें उस मूल्य के लिए कुछ व्यावसायिक तर्क जोड़ने की आवश्यकता है (यह पूरी तरह से आंतरिक मूल्य है, तो हम कुछ भी कर सकते हैं जो हम इसके बाद चाहते हैं) तो यह पहले से ही हमारे लिए 'संपत्ति' है। जीत का गर्म भाप कप!


2

मैं विकल्प # 4 करता हूं क्योंकि एसएससीएलआई जैसा दिखता है, लेकिन ईमानदारी से मुझे निजी चर के नामकरण पर ध्यान नहीं है। पब्लिक एक अलग कहानी है।

BTW आप m_MyInteger को भूल गए


2

मैं इसे "मेरा" कुछ भी नहीं कहूंगा!

लेकिन मैं कहूंगा

class C
{
     int VariableName { get; set; }
}

स्पष्ट चर होने की तुलना में अक्सर यह अच्छा होता है। अगर मेरे पास एक स्पष्ट निजी चर होता, तो मैं उसे कॉल करताint _variableName;


1

C ++ में, मैं _ का उपयोग करता हूं क्योंकि मैं संपादकों को बहुत स्विच करता हूं जो मुझे यह देखने की अनुमति नहीं देता है कि क्या यह निजी है।

C # के लिए मैं _ को दूर छोड़ता हूं क्योंकि Visual Studio मुझे यह देखने की अनुमति देता है कि क्या यह निजी है।

मैं ऐसा करने के लिए कैमल केस तरीके का उपयोग करता हूं।


1

मैं 4 का उपयोग करता हूं ( private int _myInteger;) क्योंकि:

private int myInteger;

इस तरह से मैं अपने स्थानीय चरों का नाम देता हूं।

private int MyInteger;

यह मैं स्थिरांक का नाम है।

private int mMyInteger;

यह C # स्टाइल नहीं है।

private int _MyInteger;

यह अजीब लग रहा है।


1

अंडरस्कोर के साथ।

Bill Wagner बताते हैं कि प्रभावी C # में क्यों । लेकिन मैं अपने पूर्णांक को एक पूर्णांक का नाम कभी नहीं दूंगा , बेहतर कुछ जैसे कि _age या _length। उदाहरण के नाम में TypeName को शामिल करना एक भयानक अभ्यास है। नाम स्वयं व्याख्यात्मक होने चाहिए और चूंकि C # टाइप-सेफ प्रकार है जो हर समय अटैच पाए जा सकते हैं।


1
हाँ, यह एक उदाहरण था।
वेकनो

1

आपको अधिक विशिष्ट उदाहरण देने की आवश्यकता है, लेकिन:

private int count, private int badFileCount,private static readonly int ReconnectAttemptsLimit

वैसे, आपको यह सब मुफ़्त मिलता है जब आप इंस्टॉल करते हैं और नवीनतम और महानतम का उपयोग करना शुरू करते हैं MSFT Stylecop


0

मैं विकल्प 5 से जाता हूं: private int _MyFoo

मैं हालांकि _myFoo पर कोई वास्तविक प्रतिस्पर्धात्मक लाभ नहीं देखता।


0

जैसे निजी चर के लिए ऊंट का उपयोग करें myInteger

एक पूर्ववर्ती पर विचार करें _यदि भ्रम को कम करने के लिए
चर संपत्ति का बैकअप है- _myPropertyसंपत्ति के लिए परिवर्तनीयMyProperty


0

मेरे पास मेरा चर नाम है, न केवल मेरा बल्कि बाकी सभी लोग भी ऐसा करते हैं। परियोजना की एक बड़ी मात्रा में स्थिरता है।


0

Juval Lowy का IDesign C # Coding Standard काफी लोकप्रिय है। यह मानक "m_" (विकल्प 6) के साथ निजी सदस्य चर उपसर्ग की सिफारिश करता है। यही हम अपनी टीम में करते हैं।

private int m_myInteger;

विकल्प 4 ( _myInteger) इस मानक का स्वीकार्य बदलाव है।

मुझे MSDN की अनुशंसा ( myInteger) पसंद नहीं थी , क्योंकि इससे स्थानीय चर से एक निजी सदस्य को बताना मुश्किल हो जाता है। बेशक, उनकी सिफारिश निजी सदस्यों को अर्हता प्राप्त करके इस समस्या को हल करती है this, जो मुझे बेमानी लगती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.