2009-09-08 7 views
7

जब मुझे इंटरफ़ेस सदस्य को स्पष्ट रूप से कार्यान्वित करने की आवश्यकता होती है, तो यह निजी है।सी # - "स्पष्ट रूप से कार्यान्वित इंटरफ़ेस सदस्य हमेशा निहित निजी" के कारण क्या हैं?

उदाहरण के लिए

:

// when explicit implementation it is always private 
    void IPointy.Draw() 

    { 

    } 

इस तरह के डिजाइन नियम लागू की जाती है क्यों?

नोट:

एक ही तरीके का होने, संघर्ष मैं स्पष्ट रूप से लागू करने के लिए है से बचने के लिए दो इंटरफेस के रूप में

class Line :IPointy 
{ 

     // Now it is private  
     void IPointy.Draw() 

     { 


     } 

} 

मेरा प्रश्न को लागू करने के लिए कारण निजी के रूप में है है है।

उत्तर

0

2 क्योंकि इंटरफेस कि स्पष्ट रूप से उस वर्ग द्वारा कार्यान्वित ही नाम के साथ विधि हो सकता है। यही कारण है कि इंटरफ़ेस के दौरान क्लास संदर्भ और सार्वजनिक द्वारा एक्सेस करते समय यह विधि निजी होती है।

+0

लेकिन फिर भी मैं उन्हें स्पष्ट रूप से .Still संघर्ष होते हैं जिक्र कर रहा हूँ? –

+0

जब आप स्पष्ट रूप से संदर्भ दे रहे हैं, विधि सार्वजनिक है, संपादित पोस्ट देखें ... –

0

क्योंकि आप कह रहे हैं जब मेरी वस्तु एक IPointy है की तुलना में आप IPointy विधि ड्रा कॉल कर सकते हैं। अन्यथा नहीं।

public interface IPointy 
{ 
    void Draw(); 
} 

public class PointyImplementer : IPointy 
{ 
    #region IPointy Members 

    void IPointy.Draw() 
    { 
     Console.WriteLine("You have drawn"); 
    } 

    #endregion 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     IPointy pi = new PointyImplementer(); 

     pi.Draw(); 

     Console.Read(); 
    } 
} 

यह आपके लिए लागू होने वाले इंटरफ़ेस को मुखौटा करने का एक तरीका है।

18

स्पष्ट रूप से कार्यान्वित इंटरफ़ेस सदस्यों बस निजी नहीं हैं। वे सार्वजनिक हैं - तरह।

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

उनके पास कोई निर्दिष्ट पहुंच स्तर नहीं है क्योंकि में सार्वजनिक होने के लिए है इंटरफ़ेस की शर्तें: इसमें कोई विकल्प शामिल नहीं है। वे एक प्रकार के सामान्य सार्वजनिक सदस्यों के समान सार्वजनिक सदस्य नहीं हैं, लेकिन वे किसी भी अन्य असेंबली से कॉल करने योग्य हैं जो संदर्भ को पकड़ सकते हैं और इसे इंटरफ़ेस प्रकार पर डाल सकते हैं ...

सी #

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

+0

वे निजी नहीं हैं, वे सार्वजनिक हैं। लेकिन आपको इसे कॉल करने में सक्षम होने के लिए एक इंटरफ़ेस ऑब्जेक्ट होना चाहिए। आदर्श रूप से यदि आप इंटरफ़ेस के साथ काम करते हैं, तो आप आईएमइंटरफेस प्रकार के चर का भी उपयोग करते हैं, न कि MyImplementation क्लास। एक और अच्छी बात यह है कि आप एक ही विधि हस्ताक्षर के साथ अलग-अलग इंटरफेस को कार्यान्वित कर सकते हैं - स्पष्ट रूप से। – van

+0

दोस्त मेरा अपडेट देखें। जब स्पष्टीकरण इसे कार्यान्वित करता है, तो यह कभी सार्वजनिक नहीं होता है। –

+1

@van: ठीक है, मैं यहाँ कुछ हद तक पसंद करना पसंद करता हूं। यदि आप ildasm का उपयोग करते हैं, तो आप देखेंगे कि इसे "निजी" घोषित किया गया है। यह सामान्य अर्थ में सार्वजनिक नहीं है ... और न ही यह सामान्य अर्थ में निजी है। –

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