.NETクラスが特定のインターフェイスを実装するものを見つける方法はありますか?
-
16-09-2019 - |
質問
たとえば、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)