संभावित डुप्लिकेट:
C#: Interfaces - Implicit and Explicit implementation
implicit vs explicit interface implementationअंतर्निहित <> स्पष्ट इंटरफेस
हैलो
किसी को भी मुझे बता सकते हैं क्या फर्क एक अंतर्निहित और स्पष्ट इंटरफ़ेस के बीच है?
धन्यवाद!
संभावित डुप्लिकेट:
C#: Interfaces - Implicit and Explicit implementation
implicit vs explicit interface implementationअंतर्निहित <> स्पष्ट इंटरफेस
हैलो
किसी को भी मुझे बता सकते हैं क्या फर्क एक अंतर्निहित और स्पष्ट इंटरफ़ेस के बीच है?
धन्यवाद!
एक अंतर्निहित इंटरफेस कार्यान्वयन है जहाँ आप अंतरफलक के समान हस्ताक्षर से एक विधि है।
एक स्पष्ट इंटरफ़ेस कार्यान्वयन वह जगह है जहां आप स्पष्ट रूप से घोषणा करते हैं कि विधि किस इंटरफ़ेस से संबंधित है।
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()");
}
}
तब उपयोग में क्या अंतर है? आप एक दूसरे से ऊपर क्यों पसंद करेंगे? – Killerwes
जब आपके पास एक ही विधि हस्ताक्षर के साथ 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
{
}
}
तो, क्लास आईपी में सार्वजनिक शून्य ए एक अंतर्निहित इंटरफ़ेस है, क्योंकि यह उस कक्षा के भीतर बनाया गया है, और इसमें इंटरफ़ेस ए का संदर्भ नहीं है (एए नहीं())। अगर यह एए() होता तो यह एक स्पष्ट इंटरफ़ेस होता? तब उपयोग में अंतर क्या है? – Killerwes
@ किल्लरवेस - यह _implementation_ पक्ष है, और जैसा कि आप सही हैं। मुझे 'Imp2' में स्पष्ट होना है क्योंकि दोनों इंटरफेस एक ही सदस्य घोषित करते हैं। कॉलिंग कोड में आपको 'Imp2' के विभिन्न स्पष्ट कार्यान्वयन को कॉल करने के लिए सही इंटरफ़ेस संदर्भ की आवश्यकता है। – Oded
जब आप एक इंटरफेस 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
इसके अलावा, अगर आप को पता है क्यों स्पष्ट कार्यान्वयन मौजूद चाहते हैं, कि क्योंकि आप एक ही विधि का एक से अधिक इंटरफ़ेस से (नाम और हस्ताक्षर) लागू कर सकते हैं नहीं है; तो अगर आपको विभिन्न कार्यक्षमता की आवश्यकता है, या केवल रिटर्न प्रकार अलग हैं, तो आप इसे सरल ओवरलोडिंग के माध्यम से प्राप्त नहीं कर सकते हैं। तो आपको स्पष्ट कार्यान्वयन का उपयोग करना होगा। एक उदाहरण यह है कि List<T>
IEnumerable
और IEnumerable<T>
लागू करता है और दोनों में GetEnumerator()
है लेकिन विभिन्न रिटर्न मानों के साथ।
संबंधित सूची में लगभग एक दर्जन सटीक डुप्लिकेट .... –