आप डाली नहीं कर सकते या A
से B
में बदलने का है, तो सब वे का हिस्सा एक आम इंटरफ़ेस जब तक आप वास्तव में अपने खुद रूपांतरण ऑपरेटर को परिभाषित है, तो आप प्रकारों में से एक के लिए स्रोत को नियंत्रित संभालने, या किसी अन्य प्रदान की गई उपयोगकर्ता-निर्धारित रूपांतरण की आपूर्ति का उपयोग किसी ऐसे व्यक्ति द्वारा स्रोत को नियंत्रित करता है। (हालांकि, इस तरह उपयोगकर्ता के निर्धारित रूपांतरण का मूल वस्तु की रक्षा करेगा नहीं। एक वस्तु रूपांतरण में चला जाता है, एक अलग वस्तु बाहर आता है।)
आप Interface1
करने के लिए A
से Interface1
करने के लिए B
में बदल सकते हैं, और। लेकिन दो प्रकार के सामान्य माता-पिता को साझा करने से दो प्रकार के परिवर्तनीय एक दूसरे को नहीं बनाते हैं।
A a = new A();
B b = new B();
Interface1 obj1 = a; // legal
Interface1 obj2 = b; // legal
B obj3 = (B)a; // not legal, a is simply not a B
tobias86 नीचे एक टिप्पणी में अच्छी तरह से रखा गया है, आपके पास बिल्ली और कुत्ता है। दोनों Animal
से निकले हैं। लेकिन एक बिल्ली सिर्फ एक कुत्ता नहीं है।
विस्तार के रूप में, आप इस बात से संघर्ष कर रहे हैं कि आप कैसे और क्यों इंटरफ़ेस का उपयोग करेंगे। आप ए के लिए ए को प्रतिस्थापित करने के लिए इंटरफ़ेस का उपयोग नहीं करते हैं, या ए के लिए बी को चुनते हैं। आप इसे इंटरफेस 1 के लिए या तो ए या बी को प्रतिस्थापित करने के लिए उपयोग करते हैं। यह वह इंटरफ़ेस है जिसे आप उम्मीद करते हैं, और ए या बी जो आप आपूर्ति कर सकते हैं। यह देखते हुए:
public void DoSomething(Interface1 obj) { } // expects
DoSomething(new A()); // you can supply A
या
public Interface1 GetSomething() // callers expect to get
{
return new B(); // you can supply a B
}
यह इंटरफ़ेस आप की ओर प्रोग्रामिंग कर रहे हैं, ए और बी केवल कार्यान्वयन हैं रहा है। आप सोच रहे होंगे कि आप किसी बी को बी से पास कर सकते हैं जो उम्मीद करता है। उम्मीद को संभवतः बदलने की जरूरत है।
स्रोत
2012-01-13 22:28:51
के मुकाबले मेरे लिए अप्रासंगिक होगा, मुझे वास्तव में इसकी कमी पसंद है उत्तर - सभी आवश्यक जानकारी आसानी से, स्पष्ट रूप से और स्पष्ट रूप से –
पर प्राप्त होती है उत्तरार्द्ध एक विशेष रूप से महत्वपूर्ण बिंदु है; स्पाइडर-सूअर पहले से ही खतरनाक थे। –