यह कम से कम आलसी जवाब है (मुझे इस जवाब पर गर्व है :)
मेरे पास रेस्पर नहीं है, पहले भी कोशिश की थी लेकिन इसे खरीदना नहीं चाहता था। मैंने एक वर्ग आरेख की कोशिश की, लेकिन बिल्कुल भी व्यावहारिक नहीं है क्योंकि पदानुक्रम आरेख दुनिया में 3 गुना अधिक है और मेरे लैपटॉप की स्क्रीन में अनंत चौड़ाई नहीं है। इसलिए मेरा प्राकृतिक और आसान उपाय यह था कि किसी विधानसभा में टाइप करने के लिए कुछ विंडोज फॉर्म कोड लिखें और एक पेड़ के दृश्य में नोड्स जोड़ने के लिए प्रतिबिंब का उपयोग करें, इस प्रकार है:
कृपया मान लें कि आपके पास एक टेक्स्ट बॉक्स, एक ट्री व्यू और अन्य आवश्यक चीजें हैं, जिस पर यह कोड चलता है
//Go through all the types and either add them to a tree node, or add a tree
//node or more to them depending whether the type is a base or derived class.
//If neither base or derived, just add them to the dictionary so that they be
//checked in the next iterations for being a parent a child or just remain a
//root level node.
var types = typeof(TYPEOFASSEMBLY).Assembly.GetExportedTypes().ToList();
Dictionary<Type, TreeNode> typeTreeDictionary = new Dictionary<Type, TreeNode>();
foreach (var t in types)
{
var tTreeNode = FromType(t);
typeTreeDictionary.Add(t, tTreeNode);
//either a parent or a child, never in between
bool foundPlaceAsParent = false;
bool foundPlaceAsChild = false;
foreach (var d in typeTreeDictionary.Keys)
{
if (d.BaseType.Equals(t))
{
//t is parent to d
foundPlaceAsParent = true;
tTreeNode.Nodes.Add(typeTreeDictionary[d]);
//typeTreeDictionary.Remove(d);
}
else if (t.BaseType.Equals(d))
{
//t is child to d
foundPlaceAsChild = true;
typeTreeDictionary[d].Nodes.Add(tTreeNode);
}
}
if (!foundPlaceAsParent && !foundPlaceAsChild)
{
//classHierarchyTreeView.Nodes.Add(tn);
}
}
foreach (var t in typeTreeDictionary.Keys)
{
if (typeTreeDictionary[t].Level == 0)
{
classHierarchyTreeView.Nodes.Add(typeTreeDictionary[t]);
}
}
StringBuilder sb = new StringBuilder();
foreach (TreeNode t in classHierarchyTreeView.Nodes)
{
sb.Append(GetStringRepresentation(t, 0));
}
textBox2.Text = sb.ToString();