.NETクラスが特定のインターフェイスを実装するものを見つける方法はありますか?

StackOverflow https://stackoverflow.com/questions/1134221

質問

たとえば、IlistまたはIdictionaryを実装する何かの.NETオプションが何であるかを確認したい場合。たとえば、MSDNドキュメントでそれを見つける方法はありますか?

役に立ちましたか?

解決

MSDNでそれを見つけるために、私は通常Googleに行き、「msdn ilist」のようなものを入力し、 Ilistインターフェイス 「Ilistを実装するクラス」セクションがあります。これは、インターフェイスクラスのいずれかに当てはまります。

次のような基本クラスを見つけた場合 dictionarybase, 、呼ばれるリンクがあります 派生クラス それはあなたを示している木に連れて行きます 継承階層.

他のヒント

使用可能だと思います リフレクター

これをプログラムで行うこともできます。

タイプが配置されているアセンブリを知っている場合(私は使用しています mscorlib それがどこにあるのか string 位置する)この方法を使用してリストを作成できます。

.NET 3.0

List<Type> implementors = 
   Assembly.GetAssembly(typeof(string))
    .GetTypes()
    .Where(type => type.GetInterfaces().Contains(typeof(IList)))
    .ToList();

.NET 2.0

List<Type> implementors = new List<Type>();

foreach (Type type in Assembly.GetAssembly(typeof(string)).GetTypes())
{
    foreach (Type interfaceType in type.GetInterfaces())
    {
        if (interfaceType == typeof(IList))
        {
            implementors.Add(type);
        }
    }
}

implementors リストにはのリストがあります Types インターフェイスを実装します IList. 。あなたは変えられる IList あなたが望むあらゆるインターフェイスに、 IDictionary, ICollection, 、など

編集:

これを現在のすべてのアセンブリに拡張したい場合 AppDomain, 、できます:

List<Type> implementors = 
AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes()
                        .Where(type => type.GetInterfaces().Contains(typeof(IList)))
            ).ToList();

それは本当にすべてあなたがデータで何をしているかに依存しています。あなた自身の個人的な満足のためにそれらを見たいだけなら、 リフレクター 特に、アプリケーションドメインにロードされたアセンブリを超えて見たい場合は、最も簡単なオプションになります(最初からアプリケーションがあると仮定します)。その場合、GACからすべてのアセンブリをロードできると思います...しかし、これは基本的に何ですか リフレクター 個別に必要なものを選択して選択することを除いて行います。

この方法で特定のタイプを実装するインターフェイスを検索できます。

http://msdn.microsoft.com/en-us/library/system.type.getInterfaces.aspx

トリックをする必要があります

特定のユースケースはありますか?私の頭の上からあなたは使用できます:

System.Collections.ArrayList (or derived)
System.Collections.ObjectModel.Collection<T> derived
System.Collections.CollectionBase derived
System.Collections.DictionaryBase derived
System.Collections.Hashtable (or derived)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top