アプリ版:「スタンプのみでお礼する」機能のリリースについて

C#で、動的に特定の親クラスのサブクラスを取得する方法ってないですかね?

親クラスとして、abstractなクラスを定義し、プログラム実行時に、その時存在するサブクラスの一覧を取得したいと思っています。

親クラスは固定ですが、サブクラスは追加で実装されていきます。

よろしく、お願いします。

A 回答 (3件)

>システム定義のクラスも、対象になりますよね。


なりません。
自分で定義したタイプのみです。
    • good
    • 0
この回答へのお礼

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

勉強になりました。

お礼日時:2008/04/02 13:11

C#なら#1の方法でよいと思います。


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

この回答への補足

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

補足日時:2008/04/02 12:54
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/07 16:40

サブクラスとは親クラスを継承したクラスの事でよいでしょうか?


まず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回しか実行しないとは思いますがクラスが多いと、そこそこ重いです。
他にスマートな方法があるかもしれません。

この回答への補足

ありがとうございます。
やはり、全部とってきて、親を引くしかないですか。
それは、考えたんですが・・・

システム定義のクラスも、対象になりますよね。

この方法でチャレンジしてみます。

補足日時:2008/04/02 12:50
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/02 12:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!