[C#/UWP] 클래스 계층도 표시하기
■ 클래스 계층도를 표시하는 방법을 보여준다. ▶ 클래스 계층도 표시하기 예제 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; using System.Collections.Generic; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; ... private StackPanel stackPanel; ... List<Type> descendentTypeList = GetDescendentTypeList(typeof(DependencyObject)); // '자손 타입 리스트 구하기' 참조 ClassInfo rootClassInfo = new ClassInfo(typeof(DependencyObject)); BuildClassHierarchy(rootClassInfo, descendentTypeList); // '클래스 계층도 만들기' 참조 DisplayClassHierarchy(this.stackPanel, rootClassInfo, 0); |
▶ 클래스 계층도 표시하기 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
using System; using System.Collections.Generic; using System.Reflection; using Windows.UI.ViewManagement; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media; ... this.highlightBrush = new SolidColorBrush(new UISettings().UIElementColor(UIElementType.Highlight)); ... #region 클래스 계층도 표시하기 - DisplayClassHierarchy(container, parentClassInfo, indent) /// <summary> /// 클래스 계층도 표시하기 /// </summary> /// <param name="container">컨테이너</param> /// <param name="parentClassInfo">부모 클래스 정보</param> /// <param name="indent">들여쓰기</param> public void DisplayClassHierarchy(StackPanel container, ClassInfo parentClassInfo, int indent) { TypeInfo parentTypeInfo = parentClassInfo.Type.GetTypeInfo(); TextBlock textBlock = new TextBlock(); textBlock.Inlines.Add(new Run { Text = new string(' ', 8 * indent) }); textBlock.Inlines.Add(new Run { Text = parentTypeInfo.Name }); if(parentTypeInfo.IsSealed) { textBlock.Inlines.Add(new Run { Text = " (sealed)", Foreground = this.highlightBrush }); } IEnumerable<ConstructorInfo> constructorInfoEnumerable = parentTypeInfo.DeclaredConstructors; int publicConstructorCount = 0; foreach(ConstructorInfo constructorInfo in constructorInfoEnumerable) { if(constructorInfo.IsPublic) { publicConstructorCount++; } } if(publicConstructorCount == 0) { textBlock.Inlines.Add(new Run { Text = " (non-instantiable)", Foreground = this.highlightBrush }); } container.Children.Add(textBlock); foreach(ClassInfo childClassInfo in parentClassInfo.ChildClassInfoList) { DisplayClassHierarchy(container, childClassInfo, indent + 1); } } #endregion |