2011-03-04 14 views
5

मैं विजुअल स्टूडियो में बनाए गए वृक्षदृश्य के समान कुछ खोजने की कोशिश करता हूं जो आपको कक्षा को पार करने की सुविधा देता है। क्या कोई मूल पुस्तकालय/कक्षा है जिसमें मूल रूप से एक पेड़ होता है जिसमें प्रतिबिंबित डेटा होता है जो कक्षा और उसके माध्यम से पुनरावृत्त होता है उपवर्गों? मैं कोड चाहते हैं, मैं अलग अनुप्रयोगों में दिलचस्पी नहीं है।सी # प्रतिबिंब वृक्ष

मुझे नहीं लगता कि यह प्रतिबिंब के साथ लागू करने के लिए है कि मुश्किल होगा, लेकिन मैं आशा करती हूं कि किसी और को पहले से ही यह किया है।

उत्तर

2

आप बस यहां नेस्ट वर्ग के माध्यम से पुनरावृति OT चाहते हैं एक उदाहरण

public Form1() 
    { 
     InitializeComponent(); 

     Assembly assembly = Assembly.GetAssembly(typeof (DateTime)); 
     foreach (var exportedType in assembly.GetExportedTypes()) 
     { 
      var parentNode = treeView1.Nodes.Add(exportedType.Name); 
      AddNodes(exportedType, parentNode); 
     } 
    } 

    private void AddNodes(Type type,TreeNode node) 
    { 
     foreach (var nestedType in type.GetNestedTypes()) 
     { 
      var nestedNode = node.Nodes.Add(nestedType.Name); 
      AddNodes(nestedType, nestedNode); 
     } 
    } 

शायद तुम भी तरीके के बारे में कुछ जानकारी चाहते है, उस मामले में गुण e.t.c आप उपयोग कर सकते

type.GetProperties(); 
    type.GetMethods(); 
    type.GetMembers(); 
    type.GetEvents(); 
    type.GetInterfaces(); 
2

मुझे पता है कि आपने कहा है कि आप कोड चाहते हैं, लेकिन मुझे नेट परावर्तक नामक टूल का उल्लेख करके शुरू करना है। हाल ही में, यह हर .NET डेवलपर के लिए जाने वाला टूल था जिसके बारे में आप बात कर रहे हैं। इसे ले लिया गया था लाल गेट द्वारा कुछ साल पहले, और उन्होंने हाल ही में कहा था कि वे इसके लिए चार्ज करना शुरू कर रहे हैं।

क्योंकि रेड-गेट परावर्तक के लिए चार्ज करने जा रहा है, इसलिए कुछ खुली स्रोत परियोजनाएं प्रतिस्थापन के लिए विकास को बढ़ा रही हैं। अगर मुझे भविष्य की भविष्यवाणी करनी पड़ी, तो मैं कहूंगा कि ILSpy के पास सफल होने का सबसे अच्छा मौका है क्योंकि इसे शार्प डेवलपमेंट टीम द्वारा रखा जा रहा है।

ILSpy: ILSpy Info Page

1

जब उपवर्गों के लिए खोज, पहली बात आप की जरूरत सीमाओं को परिभाषित करने के लिए है। क्या आप एक विशिष्ट असेंबली के भीतर उपclasses खोज रहे हैं? हाँ, तो इस कोड है, तो आप की आवश्यकता होगी:

Type t = typeof(System.Nullable); 
    System.Reflection.Assembly a = System.Reflection.Assembly.GetAssembly("System.DLL"); 
    Type[] types = a.GetTypes(); 
    foreach (Type type in types) 
    { 
     if (type.IsSubclassOf(t)) 
      Console.Write(type.ToString()); 
    } 

उपरोक्त कोड में, यह System.dll में Nullable के सभी उपवर्गों की खोज करता है। वर्तमान विधानसभा के भीतर उपवर्गों के लिए, बस वर्तमान विधानसभा का उपयोग कर

a = System.Reflection.Assembly.GetExecutingAssembly() 

Type कक्षा की जानकारी का एक बहुत प्रदान करता है मिलता है। तो Assembly कक्षा है।

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