• 締切済み

C#で、動的にサブクラスを取得する方法

C#で、動的に特定の親クラスのサブクラスを取得する方法ってないですかね? 親クラスとして、abstractなクラスを定義し、プログラム実行時に、その時存在するサブクラスの一覧を取得したいと思っています。 親クラスは固定ですが、サブクラスは追加で実装されていきます。 よろしく、お願いします。

みんなの回答

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

>システム定義のクラスも、対象になりますよね。 なりません。 自分で定義したタイプのみです。

masa6272
質問者

お礼

そうなんですか。 ありがとうございます。 それなら、この方法で問題ないです。 勉強になりました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

C#なら#1の方法でよいと思います。 実行時に取得するのが重いなら、そのためのツールを作ってビルド時に一覧を取得し、ファイルにでも保存しておくとよいでしょう。なお、実行ファイルに埋め込むなら2パス処理が必要になります。

masa6272
質問者

お礼

すみません。 使い慣れてなかったもので、手順間違えて、ポイント付けずに締め切ってしまいました。 遅いですが・・・個人的には、20pt以上です。

masa6272
質問者

補足

あくまでも、動的に取得したいので・・・

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

サブクラスとは親クラスを継承したクラスの事でよいでしょうか? まず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回しか実行しないとは思いますがクラスが多いと、そこそこ重いです。 他にスマートな方法があるかもしれません。

masa6272
質問者

お礼

お礼が、別に書けるんですね。 ここ、初心者なもので・・・ ありがとうございました。

masa6272
質問者

補足

ありがとうございます。 やはり、全部とってきて、親を引くしかないですか。 それは、考えたんですが・・・ システム定義のクラスも、対象になりますよね。 この方法でチャレンジしてみます。

関連するQ&A