इस विषय के बारे में बहुत सारे प्रश्न हैं, लेकिन मेरे पास इसका थोड़ा सा संस्करण है।निर्धारित करें कि कोई वर्ग एक बहुत ही विशिष्ट इंटरफ़ेस लागू करता है
interface IFoo { }
interface IBar : IFoo { }
class Foo : IFoo { }
class Bar : IBar { }
bool Implements_IFoo(Type type) { /* ??? */ }
अब, कहानी का मोड़: विधि Implements_IFoo
ही सच्चा लौट जाना चाहिए जब प्रकार IFoo केवल और नहीं लागू करता है इंटरफेस IFoo से व्युत्पन्न के किसी भी
हम निम्नलिखित कोड है।
Implements_IFoo(typeof(Foo)); // Should return true
Implements_IFoo(typeof(Bar)); // Should return false as Bar type
// implements an interface derived from IFoo
ध्यान दें कि वहाँ IFoo से प्राप्त कई इंटरफेस हो सकता है और आप जरूरी अपने अस्तित्व के बारे में पता नहीं है: यहाँ इसे समझने के लिए इस विधि के कुछ उदाहरण हैं।
स्पष्ट विधि है IFoo से प्रतिबिंबित सभी इंटरफ़ेस को प्रतिबिंब के माध्यम से प्राप्त करना और फिर टाइपफ़ोफ़ (बार) की जांच करें। गेटइंटरफेस() उनमें से कोई भी मौजूद है। लेकिन मैं सोच रहा था कि कोई और अधिक सुरुचिपूर्ण समाधान के साथ आ सकता है।
पीएस प्रश्न कुछ कोड से निकला है जो मैंने पाया है कि कक्षाओं पर इस चेक का उपयोग करता है (if(obj.GetType() == typeof(BaseClass)) { ... }
)। हम अब विशेष कोड के साथ कक्षाओं को इंटरफेस के साथ बदल रहे हैं। इसके अलावा, बस मामले में - मैं इस चेक को बुलियन ध्वज के रूप में कार्यान्वित कर रहा हूं, इसलिए यह प्रश्न पूरी तरह से काल्पनिक है।
मैं वास्तव में उत्सुक हूं कि आपको इस तरह के आत्मनिरीक्षण की आवश्यकता क्यों है। संभावना है कि आपका डिजाइन गलत है। – tdammers
कृपया अगली बार टिप्पणी करने से पहले अंत तक प्रश्न पढ़ें - मैंने पहले ही समझाया है कि यह एक काल्पनिक प्रश्न है;) – Jefim