2010-12-15 12 views
6

मैंने एक कंपाइलर त्रुटि में भाग लिया है जो मुझे काफी समझ में नहीं आता है। मेरे पास internal संपत्ति है और मैं अपने set ब्लॉक को प्रतिबंधित करना चाहता हूं जैसे कि यह केवल विरासत के माध्यम से उपलब्ध हो। मुझे लगा कि यह काम करेगा:गुणों पर एक्सेस संशोधक; निम्नलिखित काम क्यों नहीं करते?

internal bool MyProperty { 
    get { return someValue; } 
    protected internal set { someValue = value; } 
} 

लेकिन संकलक का कहना है कि set खंड पर पहुँच संशोधक internal तुलना में अधिक प्रतिबंधात्मक होने की जरूरत है - मैं कुछ याद आ रही है, या protected internalनहीं अधिक internal से प्रतिबंधक है?

उत्तर

9

protected internalकम प्रतिबंधक है; यह सुरक्षित है या आंतरिक (और) - इसलिए अतिरिक्त अन्य असेंबली से उप-वर्गों को एक्सेस करने की अनुमति देता है। आप को उलटने की आवश्यकता होगी:

protected internal bool MyProperty { 
    get { return someValue; } 
    internal set { someValue = value; } 
} 

यह आपके विधानसभा में कोड की अनुमति देगा, साथ ही अन्य विधानसभाओं से उपवर्गों, यह (पढ़ें) मिलता है - लेकिन केवल अपने विधानसभा में कोड यह (लिख) सेट कर सकते हैं।

+0

महान विवरण के लिए निजी; अब मुझे सही समझ में आता है। –

2

नहीं, यह दोनों का संघ है, चौराहे नहीं; इसलिए protected internal उन दोनों की तुलना में कम प्रतिबंधित है। चौराहे सी # की विशेषता नहीं है; सीएलआर "परिवार और विधानसभा" का समर्थन करता है, लेकिन सी # केवल "परिवार या विधानसभा" का समर्थन करता है।

3

सी # में पहुँच संशोधक पर documentation से:

संरक्षित आंतरिक पहुंच स्तर संरक्षित या आंतरिक का मतलब है, नहीं की रक्षा की और आंतरिक। अन्य शब्दों में, एक संरक्षित आंतरिक सदस्य को असेंबली में किसी भी वर्ग से प्राप्त किया जा सकता है, जिसमें व्युत्पन्न कक्षाएं शामिल हैं। उसी असेंबली में केवल कक्षाओं तक पहुंचने के लिए पहुंच को सीमित करने के लिए, कक्षा को आंतरिक रूप से घोषित करें, और अपने सदस्यों को सुरक्षित के रूप में घोषित करें।


वांछित प्रभाव प्राप्त करने के लिए, यदि आप इसके बजाए तरह पहुँच संशोधक स्वैप करने के लिए, की जरूरत है:

protected internal bool MyProperty 
{ 
    get { return someValue; } 
    internal set { someValue = value; } 
} 
1

यहां, protected internalinternal पर कम प्रतिबंधक है।

  • protected internal - वर्तमान विधानसभा और किसी भी प्रकार की है कि अन्य विधानसभाओं में इस प्रकार की विरासत के लिए सार्वजनिक।

  • internal - इस विधानसभा के लिए सार्वजनिक और अन्य विधानसभाओं

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