नीचे दिए गए उदाहरण में, कार्यान्वयन वर्ग की विधि के लिए एक तरीका है जो स्पष्ट रूप से संकलक को बताता है कि यह कौन सा इंटरफ़ेस सदस्य लागू करता है? मुझे पता है इंटरफेस के बीच अस्पष्टता को हल करना संभव है, लेकिन यहां यह एक इंटरफेस के भीतर है।अस्पष्ट इंटरफ़ेस विधि हस्ताक्षर कैसे हल करें, जब कई सामान्य प्रकार के तर्क समान होते हैं
interface IFoo<A, B>
{
void Bar(A a);
void Bar(B b);
}
class Foo : IFoo<string, string>
{
public void Bar(string a) { }
}
इस मामले void Bar(string a)
की एक एकल कार्यान्वयन होने में इंटरफ़ेस के दोनों तरीकों को लागू करता है:
interface IFoo<A,B>
{
void Bar(A a);
void Bar(B b);
}
class Foo : IFoo<string, string>
{
public void Bar(string a) { }
public void Bar(string b) { } // ambiguous signature
}
आप इंटरफेस को गलत समझ रहे हैं। आपको केवल 'सार्वजनिक शून्य बार (स्ट्रिंग ए) {} 'की आवश्यकता है। आप इंटरफ़ेस के *** अनुबंध *** को कार्यान्वित कर रहे हैं, न कि विधि परिभाषाएं स्वयं। बाहरी कॉलर को 'ए' =' बी' होने पर दो 'बार' परिभाषाओं के बीच कोई अंतर नहीं है। वे एक ही हैं। – Rob
मुझे नहीं लगता कि आप इसे हल कर सकते हैं क्योंकि यदि आप जेनेरिक का उपयोग नहीं करते हैं, तो जेनिक्स के बिना लिखें और देखें कि क्या होता है, शायद यह समझने में आपकी सहायता करता है कि क्यों संभव नहीं है –
आगे की व्याख्या करने के लिए, आपका इंटरफ़ेस कहता है "कोई भी जो उपकरण लागू करता है मैं 'बार (ए)' और 'बार (बी)' लागू करेगा। '' गुजरते समय, अनुबंध बन जाता है "जो भी मुझे लागू करता है वह 'बार (स्ट्रिंग)' लागू करेगा। –
Rob