2011-06-14 10 views
23

(this comment से प्रेरित)क्या सी # को निजी कीवर्ड चाहिए?

वहाँ कभी एक स्थिति है जिसमें आप जरूरतprivate कीवर्ड का उपयोग करने के है?
(दूसरे शब्दों में, एक स्थिति जिसमें कीवर्ड को छोड़ना अलग-अलग व्यवहार होगा)

+0

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

+0

बिल्कुल। एक 'निजी' गैर-घोंसला वाला प्रकार कोई समझ नहीं लेता है; यह 'आंतरिक' जैसा ही होगा। – SLaks

उत्तर

47
public class Foo 
{ 
    public int Bar { get; private set; } 
} 

'निजी' शब्द को छोड़कर पहुंच को बदल दिया जाएगा।

+1

सही। मुझे यकीन नहीं है कि मैंने इसके बारे में क्यों नहीं सोचा था। – SLaks

+0

ध्यान दें कि यह सुविधा (मिश्रित दृश्यता एक्सेसर्स) सी # 2 के लिए नई है।0 – SLaks

+7

@ स्लक्स: बेशक, सी # 2.0 छह साल पहले भेज दिया गया था, इसलिए "नया सी # 2.0" ऑक्सीमोरोन का थोड़ा सा है। एक संपत्ति में मिश्रित पहुंच अब लंबे समय से भाषा की एक विशेषता रही है। –

1

private रनटाइम व्यवहार के बारे में नहीं है। यह आपके आवेदन को बनाए रखने योग्य है। private द्वारा छिपा हुआ क्या है कभी भी public या protected सदस्यों के माध्यम से अपनी कक्षा के बाहर कोड को प्रभावित कर सकता है।

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

+0

मैं समझता हूं; मेरा मतलब संकलन-समय और मेटाडाटा व्यवहार था। – SLaks

+1

प्रश्न इस तथ्य के बारे में अधिक प्रतीत होता है कि यदि आप पूरी तरह से एक्सेस संशोधक को छोड़ देते हैं, तो यह लगभग हमेशा डिफ़ॉल्ट रूप से 'निजी' पहुंच में परिणाम देता है। जैसा कि दो उत्तर पोस्टिंग अब सुझाव देते हैं, हालांकि; यह केवल 'लगभग' है। –

8

एक स्थिति है जिसमें कीवर्ड [private] अलग व्यवहार में परिणाम होगा

डेविड यॉ के जवाब दिया सबसे सामान्य स्थिति को छोड़ते हुए में।

Account_generated.cs में:

// Generated file. Do not edit! 

public partial class Account 
{ 
    ... 

    private partial class Helper 
    { 
    ... 
    } 

    ... 
} 

AccountHandCoded.cs में:

public partial class Account 
{ 
    ... 

    public partial class Helper 
    { 
    ... 
    } 

    ... 
} 

ऊपर कोड संकलन नहीं होगा यहाँ एक और एक है। Accountका पहला "भाग" नेस्टेड क्लास Helperprivate होने के लिए आवश्यक है। इसलिए Helper सार्वजनिक करने के लिए हाथ-कोडर द्वारा प्रयास विफल होना चाहिए!

हालांकि, कक्षा के पहले भाग में private कीवर्ड को छोड़ दिया गया था, सभी संकलित होंगे।

तो partial वर्गों (और structs, इंटरफेस), पहुँच स्तर के मुक्त घोषणा के लिए

partial class Name 

का अर्थ है "अन्य इस वर्ग की 'भागों' तय करने के लिए क्या किया जाना चाहिए पहुँच अनुमति दी जाती है।"

स्पष्ट रूप में डिफ़ॉल्ट पहुंच (जो गैर नेस्टेड प्रकार के लिए internal और private है नेस्टेड लोगों के लिए) दे रही है जबकि अर्थ है "इस वर्ग संभव सबसे प्रतिबंधित पहुँच होनी चाहिए, और अन्य 'भागों' है कि इस तथ्य को नहीं बदल सकते।"

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