पर इंटरफ़ेस को कई बार परिभाषित करना I अनिवार्य रूप से IFoo
को विरासत कक्षा में दो बार परिभाषित करता है। क्या इससे कुछ अप्रत्याशित परिणाम निकलते हैं?विरासत वर्ग
interface IFoo {
...
}
interface IBar : IFoo {
...
}
class Base : IFoo {
...
}
class Derived : Base, IBar {
...
}
कारण मैं IFoo
से IBar
इनहेरिट बनाना चाहते तो मैं Derived
पर काम कर सकते के रूप में यह यह कास्ट करने के लिए बिना IFoo
था।
if (Derived is IBar)
// Do work
यदि यह वारिस नहीं है तो मुझे इसे कास्ट करना होगा। जो अधिक जटिल उपयोग करता है, और कक्षा के उपयोगकर्ता यह समझ नहीं सकते कि IBar
सिर्फ IFoo
का एक विशेषज्ञ है।
if (Derived is IBar)
Derived as IFoo
// Do work
क्या यह बुरा अभ्यास है? इस समस्या के लिए अन्य समाधान क्या हैं?
आप क्यों करना चाहते हैं 'अगर (आईबीआर व्युत्पन्न है) IFoo' के रूप में व्युत्पन्न? क्यों नहीं 'अगर (व्युत्पन्न IFoo है)' क्यों? –
क्योंकि आईबार एक मार्कर इंटरफेस है जो मुझे बताता है कि 'व्युत्पन्न' एक विशिष्ट प्रकार का है। इस तरह मैं सभी IFoo को संग्रह में रख सकता हूं और उन सभी के साथ काम कर सकता हूं। मुझे आईबीआर प्रकारों पर केवल "काम करना" चाहिए, जो मैं कर सकता हूं। ओएफटी टाइप। –