2011-03-04 48 views
5

我「米試圖找到類似內置到Visual Studio中的樹視圖,可以讓你穿越一類的東西。是否有一個基本庫/類,基本上包含了樹的數據反映的是通過類和迭代子?我想要的代碼,我沒有興趣在不同的應用程序。C#反射樹

我不認爲這將是很難用反射來實現,但我希望別人已經做到了。

回答

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反射工具開始。直到最近,它是去到工具,每一個.NET開發人員做你在說什麼。它被接管由紅門少數幾年前,他們最近表示他們將開始收費。

因爲紅門要爲反射充電,相當多的開源項目進行更換斜坡向上發展。如果我必須預測未來,我會說ILSpy有最好的成功機會,因爲它被SharpDevelop團隊推出。

ILSpy:ILSpy Info Page

1

當子類搜索,你需要首先定義邊界。您是否在特定裝配中搜索子類?如果是,那麼這是您需要的代碼:

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類也是如此。