2012-01-19 11 views

答えて

62

アセンブリ内のすべての型を読み込み、それらの型を列挙してオブジェクトの型を実装する型を確認できます。あなたは「オブジェクト」と言っていますので、以下のコードサンプルはインターフェイス用ではありません。オブジェクトがで宣言されたとしても、このコードサンプルは、同じアセンブリを検索します。

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;

+1

ことを行い、 'にどこの行を変更ここでtypeof(IMyInterface).IsAssignableFrom(type)&& type.IsClass'([元の質問](http://stackoverflow.com/questions/26733/getting-all-types-that-implement-an-interface-with-c) -sharp-3-0))。 – jtpereyda

9

サブクラスを追加する必要が?はい:

this.GetType().GetInterfaces() 

サブクラスは基本型を意味しますか?まあ、C#は1つの基本クラスしか持てません

サブクラスはあなたのクラスから継承するすべてのクラスを意味しますか?はい:

EDIT:(感謝vcsjones)

foreach(var asm in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
     foreach (var type in asm.GetTypes()) 
     { 
      if (type.BaseType == this.GetType()) 
       yield return type; 
     } 
} 

て、代わりにオブジェクト/クラスのインタフェースのための同じことを行うには、すべてのロードされたアセンブリの

+6

"サブクラスはインターフェースを意味する" - 申し訳ありませんが、これは意味をなさない – BartoszKP

関連する問題