2008-10-31 14 views
46

यह देखते हुए कि इन दो उदाहरणों के बराबर हैं, जो आपको लगता है preferrable है करते हैं?यदि आप अनावश्यक हैं तो क्या आप निजी एक्सेस संशोधक का उपयोग कर सकते हैं?

स्पष्ट संशोधक

public class MyClass 
{ 

    string name = "james"; 

    public string Name { 
     get { return name; } 
     set { name = value; } 
    } 

    void SomeMethod() { ... } 

} 

बिना स्पष्ट संशोधक की सहायता से

public class MyClass 
{ 

    private string name = "james"; 

    public string Name { 
     get { return name; } 
     set { name = value; } 
    } 

    private void SomeMethod() { ... } 

} 

मैं हमेशा उनसे है, लेकिन हाल ही में मैं पूर्व शैली अपनाना शुरू कर दिया है। निजी अनावश्यक है क्योंकि यह डिफ़ॉल्ट एक्सेसर संशोधक है, इसलिए क्या इसे बाहर करने का अर्थ नहीं है?

उत्तर

60

मुझे लगता है कि निजी बताते हुए स्पष्टीकरण पठनीयता में मदद करता है। यह प्रोग्रामर को इसकी दृश्यता को अलग-अलग समझने की अनुमति नहीं देगा।

+9

यह सी # spec में स्पष्ट है कि कक्षाओं के लिए डिफ़ॉल्ट संशोधक निजी है। साक्षात्कार में यह एक सामान्य प्रश्न भी है। – jonnii

+0

तो सच है .. संकलक इसे वैसे भी हटा देगा। और उन कुछ पत्रों की कोई कीमत नहीं है! – Tigraine

+0

उन्होंने मुझे समय दिया: डी – jonnii

4

मैं हमेशा स्पष्ट होना पसंद करता हूं, भले ही यह अनावश्यक हो। यह अंतर्निहित कोड टिप्पणियां प्रदान करता है और अगले व्यक्ति के लिए सहायक हो सकता है, खासकर अगर वह नोब है। :-)

1

आप सही हैं लेकिन जब से आप अपने कोड हर कोई मुझे लगता है कि आप को शामिल करना चाहिए के लिए समझ में आता है होना चाहता हूँ, आप जब अगर किसी को इस

6

व्यक्तिगत रूप से, मैं निजी संशोधक पसंद करते हैं पता नहीं है कभी पता नहीं - मैं व्याख्यात्मक की तरह। क्षेत्रों के लिए, यह भी प्रकाश डाला गया है कि यह एक सदस्य चर के रूप में एक समारोह चर करने का विरोध किया है (- जो ठीक है लोगों को ठीक से इंडेंट कर सकते हैं, लेकिन अन्यथा भ्रमित किया जा सकता है फर्क सिर्फ इतना है अन्यथा स्थान है)।

3

हमेशा स्पष्ट फार्म का उपयोग करें। जो भी कारण अंतर्निहित धारणा में परिवर्तन के लिए, के लिए उपयोग की एक स्पष्ट वाच्यार्थ के साथ कोड को तोड़ने नहीं होगा, निहित अर्थ आसानी से BREAK मेरी जबकि।

इसके अलावा, जब आप विभिन्न प्रकार की संरचनाओं के बारे में बात कर रहे हैं, तो उनके पास अलग-अलग डिफ़ॉल्ट पहुंच हो सकती हैं। स्पष्ट संशोधक के बिना, मालिक यह जानने के लिए पाठक पर है कि कौन सी संरचना में डिफ़ॉल्ट है। जैसे सी #, public को struct क्षेत्रों डिफ़ॉल्ट, private के वर्ग क्षेत्र डिफ़ॉल्ट रूप, और internal के वर्ग परिभाषाओं डिफ़ॉल्ट में।

1

मेरी समझ हमेशा सदस्यों के पास "आंतरिक" पहुंच होती है जब तक कि अन्यथा न कहा गया हो। यदि यह सच है, तो "निजी" संशोधक को यह सुनिश्चित करना होगा कि वे सदस्य वास्तव में निजी हैं।

भले ही मैं ऊपर के बारे में सही हूं या नहीं, भले ही संशोधक को स्थानांतरित करने से कोड की पठनीयता में वृद्धि हो, यदि किसी अन्य डेवलपर बाद में इस वर्ग को संशोधित कर रहा है और पहुंच के बारे में उत्सुक है। उम्मीद है की यह मदद करेगा!

+3

सदस्य अन्यथा बताए जाने तक "निजी" होते हैं। * प्रकार * (या कम से कम, बाहरी प्रकार) डिफ़ॉल्ट रूप से आंतरिक होते हैं; और नेस्टेड कक्षाओं के लिए फिर से अलग। देखें - याद रखने के लिए पहले से ही 3 परिदृश्य हैं - इसे स्पष्ट बनाने के लायक ;- –

+1

आपको तीन परिदृश्य याद रखने की आवश्यकता नहीं है। आपको बस याद रखना है कि डिफ़ॉल्ट रूप से सब कुछ कम से कम दृश्यता है जो संभवतः हो सकता है। एक बाहरी प्रकार निजी नहीं हो सकता है; अगर यह था, तो कुछ भी इसका उपयोग नहीं कर सका। एक आंतरिक प्रकार * निजी हो सकता है, क्योंकि इसे अपने बाहरी प्रकार से एक्सेस किया जा सकता है, और यही कारण है कि निजी इसकी डिफ़ॉल्ट दृश्यता है। सी # में डिफ़ॉल्ट दृश्यता पूरी तरह से तार्किक हैं - और इस प्रकार यह स्पष्ट नहीं है * यह * लायक है। –

+0

सदस्यों के पास VB .NET में डिफ़ॉल्ट रूप से आंतरिक ('मित्र') दृश्यता है। वीबी .NET नियमों के मूल रूप से आपको दृश्यता स्पष्ट करने की आवश्यकता होती है, क्योंकि उनके लिए कोई स्पष्ट तर्क नहीं है। सी # नियमों में एक साधारण तार्किक नियम है (पिछली टिप्पणी देखें), और डिफ़ॉल्ट को छोड़ना सुरक्षित है जब तक आपको उन्हें बदलने की आवश्यकता न हो। –

2

मैं हर समय स्पष्ट रूप से जाता हूं। यदि कुछ और नहीं है तो यह आपके इरादे को और स्पष्ट रूप से प्रदर्शित करता है। अगर मैं कुछ निजी होना चाहता हूं तो मैं ऐसा कहूंगा। स्पष्ट रूप से संशोधक टाइपिंग सुनिश्चित करता है कि मैं चीजों को निजी छोड़ने के बजाय, इसके बारे में सोचता हूं क्योंकि यह तेज़ है। सदस्यों की एक लंबी सूची बेहतर हो गई है :)

22

इसे निजी के रूप में चिह्नित करना यह स्पष्ट करता है कि यह जानबूझकर है, "मैं वास्तव में इसके बारे में नहीं सोचता था, इसलिए मुझे नहीं पता कि यह होगा या नहीं कुछ और के रूप में बेहतर। "; इसलिए मैं इसे स्पष्ट बनाना पसंद करता हूं। हालांकि, मैं इसके बारे में धार्मिक नहीं होगा।

इसके अलावा - यह नियमों को याद रखने से रोकता है ...सदस्य डिफ़ॉल्ट रूप से निजी होते हैं, (बाहरी) प्रकार डिफ़ॉल्ट रूप से आंतरिक होते हैं; नेस्टेड प्रकार डिफ़ॉल्ट से निजी हैं ...

यह स्पष्ट करें ... यह स्पष्ट ;-p

+8

लेकिन नियम याद रखना आसान है।आप उन्हें "सबकुछ जितना संभव हो उतना छोटा दिखाई दे सकता है" के रूप में पुन: स्थापित कर सकते हैं। या "सबकुछ निजी है जब तक यह नहीं हो सकता" (बाहरी प्रकार नहीं हो सकते हैं क्योंकि तब कुछ भी उनका उपयोग नहीं कर सकता)। डिफ़ॉल्ट को याद रखने के बारे में कुछ भी मुश्किल नहीं है। –

18

मैं हमेशा यह छोड़ दृश्य अव्यवस्था कम है। सी # में, सबकुछ पर कम से कम दृश्यता पर डिफ़ॉल्ट है। एक वर्ग सदस्य (फ़ील्ड, विधि, संपत्ति) निजी पर डिफ़ॉल्ट है। एक वर्ग आंतरिक के लिए डिफ़ॉल्ट है। एक नेस्टेड क्लास निजी पर डिफ़ॉल्ट है।

यदि आपको कुछ और दिखाई देने की आवश्यकता है, तो संशोधक जोड़ें। यह उन वस्तुओं को देखना आसान बनाता है जो डिफ़ॉल्ट दृश्यता से विचलित होते हैं।

एकमात्र मामला मैं इसे देख सकता हूं क्योंकि समस्याएं उत्पन्न होती हैं यदि आप वीबी .NET पृष्ठभूमि से आते हैं। लेकिन हे, मैं एक वीबी .NET पृष्ठभूमि से आया हूं, और मुझे अभी भी पता है कि सी # में डिफ़ॉल्ट दृश्यताएं क्या हैं।

वीबी .NET में, दूसरी तरफ, मैं इसे हमेशा इसमें शामिल करता हूं क्योंकि डिफ़ॉल्ट बल्कि बेवकूफ हैं; उप-फ़ंक्शन के लिए डिफ़ॉल्ट FriendPrivate के बजाय डिफ़ॉल्ट है।

3

मैं हमेशा दृश्यता स्पष्ट रूप से निर्दिष्ट करता हूं। मैं कंपाइलर को अपने इरादे का अनुमान लगाने की अनुमति नहीं देना पसंद करता हूं।

9

मैं लगभग 7 वर्षों के लिए सी # में पूर्णकालिक विकास कर रहा हूं, और जब तक मैं इस विषय को नहीं पढ़ता, मुझे नहीं पता था कि डिफ़ॉल्ट पहुंच संशोधक क्या है। मुझे पता था कि एक अस्तित्व में था, लेकिन मैंने कभी इसका इस्तेमाल नहीं किया है।

मुझे स्पष्ट रूप से मेरे इरादे को कोड के रूप में घोषित करना पसंद है। दोनों क्योंकि मेरे पास यह देखने के लिए घोषणाएं हैं कि जब मैं वापस जाता हूं और इसे देखता हूं, और वास्तव में जब मैं एक विधि लिखता हूं तो "निजी" शब्द को सोचने और टाइप करने से मुझे लगता है कि मेरे मन में यह कुछ और है कर।

+10

"मैं लगभग 7 वर्षों के लिए सी # में पूर्णकालिक विकास कर रहा हूं, और जब तक मैं इस विषय को नहीं पढ़ता, मुझे नहीं पता था कि डिफ़ॉल्ट पहुंच संशोधक क्या है।" -> यह स्वीकार करने के लिए कुछ हिम्मत लेता है :) –

5

मुझे आमतौर पर सुपर-स्पष्ट होना पसंद है। मैं हमेशा "निजी" निर्दिष्ट करने के लिए जाऊंगा। हालांकि एक और कारण है: प्रोग्रामर भाषा प्रोग्रामिंग से आ रहे प्रोग्रामर जहां डिफ़ॉल्ट दृश्यता निजी लेकिन सार्वजनिक नहीं है, उदाहरण के लिए PHP।

+0

हाँ, अंत में, वे (PHP प्रोग्रामर) निजी सदस्यों का एक गुच्छा बनाएंगे जो वे वास्तव में चाहते हैं कि सार्वजनिक संशोधक है और लागू कक्षा का बाहरी वर्ग से परीक्षण नहीं किया जाता है। –

35

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

मेरी चिंता यह है कि सार्वजनिक और निजी इतने समान हैं, 'पी' से शुरू होने वाली 6-7 वर्ण लंबाई, नीली, इसलिए 10 स्पष्ट निजी लोगों के बीच सार्वजनिक विधि को इंगित करना बहुत मुश्किल है जिनके पास पहुंच नहीं है विशेषता।

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

मैं आम तौर पर स्पष्ट रूप से स्पष्ट पसंद करता हूं, लेकिन यह भाषा के कोने के मामलों (मुश्किल चीट्स) में एक व्यापक सुविधा में अधिक महत्वपूर्ण है। यहां मुझे लगता है कि लंबी अवधि की रखरखाव अधिक महत्वपूर्ण है।

इसके अलावा, मुझे आमतौर पर कोड पसंद है जब गणितीय में कोड सरल और स्पष्ट होता है जब कोड भविष्य में कोडर की अज्ञानता को सुरक्षित रखने के लिए स्पष्ट होता है। यह वीबी तरीका है, सी # नहीं ...

+2

हमें एक समर्थन समूह शुरू करना चाहिए! – jonnii

+1

यदि आप उन्हें नीले –

+0

दोनों पसंद नहीं करते हैं तो सभी संपादक अलग-अलग रंगों को अलग-अलग रंगों में रंग नहीं दे सकते हैं। कुछ एड-इन्स (जैसे कोडरश) उनके लिए अलग-अलग प्रतीकों को प्रदर्शित कर सकते हैं, हालांकि। –

1

सबसे पहले मैं पूछूंगा कि टीम द्वारा उपयोग किए जाने वाले पिछले कोड सम्मेलन/मानक हैं या नहीं। यदि कोई है, तो आपको इसका पालन करना चाहिए।

यदि आपको सम्मेलन को परिभाषित करना है, तो मैं स्पष्ट तरीके से धक्का दूंगा।

मेरे कारण ?;

  • मुझे एक ही संरचना रखना है (मेरा मतलब है ए-एक्सेस मॉडिफायर, बी-रिटर्न-टाइप/टाइप, सी।-नाम)।
  • मैं नहीं चाहता (और मैं दूसरों की अपेक्षा नहीं करता) डिफ़ॉल्ट रूप से सभी संशोधकों को याद रखने के लिए (which are here)।
  • सभी भाषाओं में समान नियम नहीं हैं।
  • और किसी भी तरह से मुझे लगता है कि, किसी भी तरह, डेवलपर को सोचने के लिए मजबूर करता है और चर/विधि के दायरे और उन लोगों के प्रदर्शन के बारे में अधिक जागरूक होता है। यदि आपके पास कुछ अनुभव है तो यह संभवतः लागू नहीं होगा, लेकिन यदि आप नौसिखिया हैं, या आप कम अनुभव वाले लोगों के साथ काम करते हैं, तो मुझे लगता है कि यह उपयोगी है।
संबंधित मुद्दे

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