c# - सी#में "निजी" कीवर्ड लिखने का कोई कारण?




private specifications (6)

AFAIK, निजी रूप से सी # में डिफ़ॉल्ट है (जिसका अर्थ है कि अगर मैं सार्वजनिक, संरक्षित, आंतरिक, आदि नहीं लिखता हूं तो यह डिफ़ॉल्ट रूप से निजी होगा)। (अगर गलत हो तो मुझे सही करें)।

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

इसके अलावा,

तो, उस कीवर्ड को लिखने का क्या कारण है, या यह भी क्यों मौजूद है?

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

https://code.i-harness.com

जहां तक ​​मुझे पता है, private रूप से सी # में डिफ़ॉल्ट है (जिसका अर्थ है कि अगर मैं public , protected , internal , आदि नहीं लिखता हूं तो यह डिफ़ॉल्ट रूप से private होगा)। (अगर मैं गलत हूं कृपया मुझे सही।)

तो, उस कीवर्ड को लिखने का कारण क्या है, या यह सदस्यों के लिए भी क्यों मौजूद है?

उदाहरण के लिए, जब कोई इवेंट हैंडलर स्वतः उत्पन्न होता है तो ऐसा लगता है:

private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{

}

लेकिन अगर यह निहित और डिफ़ॉल्ट है तो यह निजी क्यों लिखता है? बस इतना है कि नौसिखिया डेवलपर्स (जो नहीं जानते कि यह सी # डिफ़ॉल्ट है) जानते हैं कि यह निजी है? या कंपाइलर के लिए कोई अंतर है?

इसके अलावा, क्या ऐसा कोई मामला है जहां "निजी" (अकेला) लिखना सदस्य की पहुंच को बदल देगा ?


AFAIK, सी # में हर जगह डिफ़ॉल्ट है

काफी नहीं - डिफ़ॉल्ट "इस घोषणा के लिए सबसे प्रतिबंधित पहुंच उपलब्ध है"। तो उदाहरण के लिए, शीर्ष-स्तरीय प्रकार के साथ डिफ़ॉल्ट internal ; एक नेस्टेड प्रकार के लिए डिफ़ॉल्ट private

तो, उस कीवर्ड को लिखने का क्या कारण है, या यह भी क्यों मौजूद है?

यह स्पष्ट करता है, जो दो कारणों से अच्छा है:

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

आपके अंतिम भाग के लिए:

इसके अलावा एक ऐसा मामला है जहां "निजी" (अकेला) लिखना सदस्य की पहुंच को बदल देगा?

हां, संपत्ति का आधा हिस्सा दूसरे की तुलना में अधिक प्रतिबंधित है:

// Public getter, public setter
public int Foo { get; set; }

// Public getter, private setter
public int Bar { get; private set; }

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

व्यक्तिगत रूप से मैं चाहता हूं कि सीलबंद / अनदेखा के लिए भी ऐसा करने का एक तरीका था, प्रकार की घोषणाओं के लिए - संभवतः एक डिफ़ॉल्ट भी नहीं है। मुझे संदेह है कि कई डेवलपर्स (स्वयं शामिल हैं अगर मैं सावधान नहीं हूं) कक्षाओं को बेकार छोड़ दें क्योंकि यह उन्हें सील करने से कम प्रयास है।


पठनीयता - सभी को पता नहीं है कि निजी डिफ़ॉल्ट व्यवहार है।

इरादा - एक स्पष्ट संकेत देता है कि आपने विशेष रूप से संपत्ति को निजी घोषित कर दिया है (किसी भी कारण से)।


पठनीयता, इरादे का प्रदर्शन दो महान कारण हैं जिनके बारे में मैं सोच सकता हूं।


मैं बाकी वर्ग के दायरे की पठनीयता के साथ स्थिरता के लिए कहूंगा।


स्पष्टता को स्पष्ट रूप से निर्दिष्ट करने का एक अच्छा कारण यह है कि आपको इस बारे में सोचना नहीं है कि आप जिस संदर्भ में हैं, उसके लिए डिफ़ॉल्ट क्या है।

एक और अच्छा कारण यह है कि FxCop आपको ऐसा करने के लिए कहता है।





auto-generate