C# で、リフレクションまたはその他のメソッドを介して、オブジェクトのすべてのスーパークラス (具体的および抽象的、主に具体的なクラスに関心がある) のリストを返すことは可能ですか? たとえば、「Tiger」クラスを渡すと、次のように返されます。
- 虎
- ネコ
- 動物
- 物体
C# で、リフレクションまたはその他のメソッドを介して、オブジェクトのすべてのスーパークラス (具体的および抽象的、主に具体的なクラスに関心がある) のリストを返すことは可能ですか? たとえば、「Tiger」クラスを渡すと、次のように返されます。
static void VisitTypeHierarchy(Type type, Action<Type> action) {
if (type == null) return;
action(type);
VisitTypeHierarchy(type.BaseType, action);
}
例:
VisitTypeHierarchy(typeof(MyType), t => Console.WriteLine(t.Name));
プロパティを使用すると、抽象クラスを簡単に扱うことができType.IsAbstract
ます。
もちろん、「GetType()」メソッドを使用して、提供されたオブジェクトのタイプを取得してください。各 Type インスタンスには、直接継承された型を提供する" BaseType " プロパティがあります。null BaseType (つまり、オブジェクト) を持つ Type が見つかるまで、型を再帰的にたどることができます。