이것은 가장 게으른 답변입니다 (이 답변을 자랑스럽게 생각합니다 :)
나는 ReSharper를 가지고 있지 않고 전에 시도했지만 그것을 사고 싶지 않았습니다. 클래스 다이어그램을 시도했지만 계층 구조 다이어그램이 전 세계에 3 번 확장되고 랩톱 화면의 너비가 무한하기 때문에 실용적이지 않습니다. 따라서 자연스럽고 쉬운 솔루션은 다음과 같이 일부 Windows Forms 코드를 작성하여 어셈블리의 유형을 반복하고 리플렉션을 사용하여 트리 뷰에 노드를 추가하는 것입니다.
텍스트 상자, 트리 뷰 및이 코드가 실행되는 양식에 필요한 기타 사항이 있다고 가정하십시오.
//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();