मैं कोड में मेरी परिदृश्य के बारे में समझाकर शुरू कर देंगे:सी # .NET - मैं विरासत के साथ काम करने के लिए टाइपऑफ() कैसे प्राप्त कर सकता हूं?
public class A { }
public class B : A { }
public class C : B { }
public class D { }
public class Test
{
private A a = new A () ;
private B b = new B () ;
private C c = new C () ;
private D d = new D () ;
public Test ()
{
// Evaluates to "false"
if (a.GetType == typeof(B)) { } //TODO: Add Logic
// Evaluates to "true"
if (b.GetType == typeof(B)) { } //TODO: Add Logic
// I WANT this to evaluate to "true"
if (c.GetType == typeof(B)) { } //TODO: Add Logic
// Evaluates to "false"
if (d.GetType == typeof(B)) { } //TODO: Add Logic
}
}
महत्वपूर्ण लाइन यहाँ पर ध्यान करने के लिए है:
if (c.GetType == typeof(B)) { }
मुझे विश्वास है कि वास्तव में इस वसीयत का मूल्यांकन " झूठा ", क्योंकि टाइपऑफ (बी) और टाइपोफ (सी) दोनों दिशाओं में एक-दूसरे के बराबर नहीं हैं। (सी एक बी है, लेकिन बी जरूरी नहीं है सी)
लेकिन मुझे जो चाहिए वह किसी तरह की स्थिति है जो इसे ध्यान में रखेगी। मैं कैसे बता सकता हूं कि कोई ऑब्जेक्ट बी है या इससे प्राप्त कुछ भी है?
मुझे कोई परवाह नहीं है कि यह बी से दिया गया ऑब्जेक्ट है, जब तक कि बेस बी क्लास वहां है। और मैं उम्मीद नहीं कर सकता कि मेरे आवेदन में व्युत्पन्न कक्षा क्या दिखाई दे सकती है। मुझे बस यह मानना है कि भविष्य में अनजान व्युत्पन्न कक्षाएं मौजूद हो सकती हैं - और इसलिए मैं केवल यह सुनिश्चित करने पर ध्यान केंद्रित कर सकता हूं कि बेस क्लास वह है जो मैं उम्मीद कर रहा हूं।
मुझे ऐसी स्थिति चाहिए जो मेरे लिए यह जांच करेगी। इसे किस तरह पूर्ण कर सकते है?
आपको जहां संभव हो इस तरह के तर्क से बचना चाहिए। जब आपको यह निर्धारित करना होता है कि किसी वस्तु का व्युत्पन्न प्रकार क्या है, तो आप बहुरूपता का अच्छा उपयोग नहीं कर रहे हैं। –
स्टीवन सूडिट के उत्तर पर मेरी टिप्पणी देखें। – Giffyguy