2011-04-19 16 views
8

संभव डुप्लिकेट की विरासत पेड़ प्राप्त करें:
To get parent class using Reflection on C#प्रकार

मैं सी # में प्रतिबिंब का उपयोग कर एक खास प्रकार की विरासत पेड़ होने का एक आसान तरीका खोजने की कोशिश कर रहा हूँ।

मान लें कि मेरे पास निम्नलिखित कक्षाएं हैं;

public class A 
{ } 

public class B : A 
{ } 

public class C : B 
{ } 

मैं कैसे प्रकार 'सी' पर प्रतिबिंब का उपयोग निर्धारित करने के लिए कि अपनी सुपर क्लास 'बी', जो बारी में 'ए' और इतने पर से आता है? मुझे पता है कि मैं 'IsSubclassOf()' का उपयोग कर सकता हूं, लेकिन मान लीजिए कि मैं उस सुपरक्लास को नहीं जानता जिसे मैं ढूंढ रहा हूं।

+3

संभावित डुबकी: http://stackoverflow.com/questions/1524562/to-get-parent-class-using-reflection-on-c – Brook

+0

संबंधित प्रश्न: http://stackoverflow.com/questions/5601486/how -to-test-if-two-generics-a-base-subclass-relationship-without-instan –

+0

ओह हाँ, यह एक डुप्ली ठीक है। मान लीजिए कि मुझे 'सुपरक्लास –

उत्तर

18

एक प्रकार के तत्काल माता-पिता प्राप्त करने के लिए, आप Type.BaseType संपत्ति का उपयोग कर सकते हैं। आप BaseType को तब तक कॉल कर सकते हैं जब तक यह null लौटाता है ताकि एक प्रकार की विरासत पदानुक्रम चल सके।

उदाहरण के लिए:

public static IEnumerable<Type> GetInheritanceHierarchy 
    (this Type type) 
{ 
    for (var current = type; current != null; current = current.BaseType) 
     yield return current; 
} 

है कि यह वैध अंत बिंदु के रूप में उपयोग करने के लिए System.Object क्योंकि सभी प्रकार (उदाहरण के लिए, इंटरफ़ेस प्रकार) से विरासत में नहीं है ध्यान दें है।

+0

' के बजाय 'पैरेंट' का इस्तेमाल करना चाहिए था, क्या दूसरी दिशा चलना संभव है? – rolls

3

System.Type प्रकार की एक वस्तु BaseType नाम की एक संपत्ति है जो "वर्तमान प्रणाली से टाइप करें जो सीधे प्राप्त होती है।" जब तक आप null प्राप्त नहीं करते हैं, तब तक आप BaseType के इस श्रृंखला को चला सकते हैं, जिस बिंदु पर आप जानते हैं कि आप System.Object पर पहुंच गए हैं।

संबंधित मुद्दे