- 締切済み
C#で、動的にサブクラスを取得する方法
C#で、動的に特定の親クラスのサブクラスを取得する方法ってないですかね? 親クラスとして、abstractなクラスを定義し、プログラム実行時に、その時存在するサブクラスの一覧を取得したいと思っています。 親クラスは固定ですが、サブクラスは追加で実装されていきます。 よろしく、お願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- sha-girl
- ベストアンサー率52% (430/816)
>システム定義のクラスも、対象になりますよね。 なりません。 自分で定義したタイプのみです。
- jacta
- ベストアンサー率26% (845/3158)
C#なら#1の方法でよいと思います。 実行時に取得するのが重いなら、そのためのツールを作ってビルド時に一覧を取得し、ファイルにでも保存しておくとよいでしょう。なお、実行ファイルに埋め込むなら2パス処理が必要になります。
お礼
すみません。 使い慣れてなかったもので、手順間違えて、ポイント付けずに締め切ってしまいました。 遅いですが・・・個人的には、20pt以上です。
補足
あくまでも、動的に取得したいので・・・
- sha-girl
- ベストアンサー率52% (430/816)
サブクラスとは親クラスを継承したクラスの事でよいでしょうか? まずAssemblyを取得し GetTypesですべてのタイプを列挙して調べてはどうですか? static void Main() { System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); foreach( Type type in assembly.GetTypes() ) { if ( check(targetType) ) { // targetTypeを継承している。 } } } bool check(Type type,Type base) { if (type.Base==base) { return true; } else if (type.Base == null) { return false; } return check( type.Base , base ); } 親クラスは一つだとすると 1回しか実行しないとは思いますがクラスが多いと、そこそこ重いです。 他にスマートな方法があるかもしれません。
お礼
お礼が、別に書けるんですね。 ここ、初心者なもので・・・ ありがとうございました。
補足
ありがとうございます。 やはり、全部とってきて、親を引くしかないですか。 それは、考えたんですが・・・ システム定義のクラスも、対象になりますよね。 この方法でチャレンジしてみます。
お礼
そうなんですか。 ありがとうございます。 それなら、この方法で問題ないです。 勉強になりました。