2011-05-26 13 views
6

संभावित डुप्लिकेट:
C#: Interfaces - Implicit and Explicit implementation
implicit vs explicit interface implementationअंतर्निहित <> स्पष्ट इंटरफेस

हैलो

किसी को भी मुझे बता सकते हैं क्या फर्क एक अंतर्निहित और स्पष्ट इंटरफ़ेस के बीच है?

धन्यवाद!

+2

संबंधित सूची में लगभग एक दर्जन सटीक डुप्लिकेट .... –

उत्तर

3

एक अंतर्निहित इंटरफेस कार्यान्वयन है जहाँ आप अंतरफलक के समान हस्ताक्षर से एक विधि है।

एक स्पष्ट इंटरफ़ेस कार्यान्वयन वह जगह है जहां आप स्पष्ट रूप से घोषणा करते हैं कि विधि किस इंटरफ़ेस से संबंधित है।

interface I1 
{ 
    void implicitExample(); 
} 

interface I2 
{ 
    void explicitExample(); 
} 


class C : I1, I2 
{ 
    void implicitExample() 
    { 
     Console.WriteLine("I1.implicitExample()"); 
    } 


    void I2.explicitExample() 
    { 
     Console.WriteLine("I2.explicitExample()"); 
    } 
} 

MSDN: implicit and explicit interface implementations

+0

तब उपयोग में क्या अंतर है? आप एक दूसरे से ऊपर क्यों पसंद करेंगे? – Killerwes

+0

जब आपके पास एक ही विधि हस्ताक्षर के साथ 2 इंटरफेस होते हैं, तो आप स्पष्ट रूप से 2 विधियों की घोषणा कर सकते हैं जो प्रत्येक के लिए विधि को लागू करते हैं। या यदि आप यह स्पष्ट करना चाहते हैं कि इंटरफ़ेस को लागू करने के लिए कोई विधि है तो आप स्पष्ट रूप से ऐसा घोषित कर सकते हैं।लागू घोषणा मौजूद है क्योंकि ज्यादातर आपको स्पष्ट रूप से स्पष्ट रूप से घोषित करने की आवश्यकता नहीं है, और इंटरफ़ेस कार्यान्वयन को माना जा सकता है। –

2

स्पष्ट रूप से इसका मतलब है कि आप इंटरफेस निर्दिष्ट करते हैं, अंतर्निहित मतलब है कि आप नहीं करते हैं।

उदाहरण के लिए:

interface A 
{ 
    void A(); 
} 

interface B 
{ 
    void A(); 
} 

class Imp : A 
{ 
    public void A() // Implicit interface implementation 
    { 

    } 
} 

class Imp2 : A, B 
{ 
    public void A.A() // Explicit interface implementation 
    { 

    } 

    public void B.A() // Explicit interface implementation 
    { 

    } 
} 
+0

तो, क्लास आईपी में सार्वजनिक शून्य ए एक अंतर्निहित इंटरफ़ेस है, क्योंकि यह उस कक्षा के भीतर बनाया गया है, और इसमें इंटरफ़ेस ए का संदर्भ नहीं है (एए नहीं())। अगर यह एए() होता तो यह एक स्पष्ट इंटरफ़ेस होता? तब उपयोग में अंतर क्या है? – Killerwes

+0

@ किल्लरवेस - यह _implementation_ पक्ष है, और जैसा कि आप सही हैं। मुझे 'Imp2' में स्पष्ट होना है क्योंकि दोनों इंटरफेस एक ही सदस्य घोषित करते हैं। कॉलिंग कोड में आपको 'Imp2' के विभिन्न स्पष्ट कार्यान्वयन को कॉल करने के लिए सही इंटरफ़ेस संदर्भ की आवश्यकता है। – Oded

9

जब आप एक इंटरफेस explicitlty लागू, कि इंटरफेस पर तरीकों केवल दृश्यमान होगी वस्तु इंटरफेस के रूप में संदर्भित है: में

public interface IFoo 
{ 
    void Bar(); 
} 

public interface IWhatever 
{ 
    void Method(); 
} 

public class MyClass : IFoo, IWhatever 
{ 
    public void IFoo.Bar() //Explicit implementation 
    { 

    } 

    public void Method() //standard implementation 
    { 

    } 
} 

तो कहीं अपने कोड आपके पास इस ऑब्जेक्ट का संदर्भ है:

MyClass mc = new MyClass(); 
mc.Bar(); //will not compile 

IFoo mc = new MyClass(); 
mc.Bar(); //will compile 

मानक आईएम के लिए plementation, यह कोई बात नहीं तुम कैसे वस्तु संदर्भ:

MyClass mc = new MyClass(); 
mc.Method(); //compiles just fine 
1

इसके अलावा, अगर आप को पता है क्यों स्पष्ट कार्यान्वयन मौजूद चाहते हैं, कि क्योंकि आप एक ही विधि का एक से अधिक इंटरफ़ेस से (नाम और हस्ताक्षर) लागू कर सकते हैं नहीं है; तो अगर आपको विभिन्न कार्यक्षमता की आवश्यकता है, या केवल रिटर्न प्रकार अलग हैं, तो आप इसे सरल ओवरलोडिंग के माध्यम से प्राप्त नहीं कर सकते हैं। तो आपको स्पष्ट कार्यान्वयन का उपयोग करना होगा। एक उदाहरण यह है कि List<T>IEnumerable और IEnumerable<T> लागू करता है और दोनों में GetEnumerator() है लेकिन विभिन्न रिटर्न मानों के साथ।

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