オブジェクトの場合、リフレクションを使用してすべてのサブクラスを取得できますか?
アセンブリにすべてのタイプをロードしてから列挙し、どのタイプがオブジェクトのタイプを実装しているかを確認できます。あなたは「オブジェクト」と言ったので、以下のコードサンプルはインターフェース用ではありません。また、このコードサンプルは、オブジェクトが宣言された同じアセンブリのみを検索します。
class A
{}
...
typeof(A).Assembly.GetTypes().Where(type => type.IsSubclassOf(typeof(A)));
または、コメントで示唆されているように、このコードサンプルを使用して、ロードされたすべてのアセンブリを検索します。
var subclasses =
from Assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in Assembly.GetTypes()
where type.IsSubclassOf(typeof(A))
select type
両方のコードサンプルでは、using System.Linq;
を追加する必要があります
インターフェイスを意味するサブクラス?はい:
this.GetType().GetInterfaces()
基本型を意味するサブクラス?まあ、C#は1つのベースクラスしか持つことができません
サブクラスは、クラスを継承するすべてのクラスを意味しますか?はい:
編集:(ありがとうvcsjones)
foreach(var asm in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var type in asm.GetTypes())
{
if (type.BaseType == this.GetType())
yield return type;
}
}
そして、すべてのロードされたアセンブリに対してそれを行います