4

実行時に、親クラスを指定したいと思います。その後、プログラムはすべての子クラスのリストを生成します (世代数は問いません)。たとえばEntity、親として andItem:EntityActor:Entityがある場合、"Actor" と "Item" の 2 つの文字列が存在します。

それSystem.Reflection.TypeInfoがまさに私が探しているものだと思います。ただし、これは .NET 4.5 に限定されているようで、残念ながら私の環境は 3.5 のままです。

.NET 3.5 でこれを行う別の方法はありますか、それともアップグレードを検討する必要がありますか?

4

4 に答える 4

8
var pType = typeof(Entity);
IEnumerable<string> children = Enumerable.Range(1, iterations)
   .SelectMany(i => Assembly.GetExecutingAssembly().GetTypes()
                    .Where(t => t.IsClass && t != pType
                            && pType.IsAssignableFrom(t))
                    .Select(t => t.Name));

デモ

于 2012-12-15T22:36:55.717 に答える
4

考えられる方法の 1 つは、この方法を利用するType.IsAssignableFromことです。すべてのタイプをループして、真であるタイプを選択します。

基本的に、それは次のようなものになります

Type parent = Type.GetType("Entity");
Type[] types = Assembly.GetExecutingAssembly().GetTypes(); // Maybe select some other assembly here, depending on what you need
Type[] inheritingTypes = types.Where(t => parent.IsAssignableFrom(t));

現時点では利用可能なコンパイラがないため、確認できませんが、ほとんど正しいはずです

于 2012-12-15T22:24:00.463 に答える