型が実装しているすべてのインターフェイスを取得するにはGetInterfacesメソッドを使うことができます。
Typeクラスを使って型が実装しているインターフェイスを調べる
using System;
using System.Collections.Generic;
using System.Reflection;
class Sample {
static void Main()
{
var t = typeof(List<int>);
// List<int>クラスが実装するインターフェイスをすべて取得して表示する
foreach (var ti in t.GetInterfaces()) {
Console.WriteLine(ti);
}
Console.WriteLine();
}
}
実行結果
System.Collections.Generic.IList`1[System.Int32] System.Collections.Generic.IReadOnlyList`1[System.Int32] System.Collections.ICollection System.Collections.Generic.ICollection`1[System.Int32] System.Collections.IEnumerable System.Collections.Generic.IEnumerable`1[System.Int32] System.Collections.Generic.IReadOnlyCollection`1[System.Int32] System.Collections.IList
一方、型が特定のインターフェイスを実装しているかどうかについては、GetInterfaceメソッドでインターフェイス名を文字列で指定して調べるか、IsAssignableFromメソッドを使ってインターフェイス型への代入を行えるかどうかを調べることによって知ることができます。
ジェネリックインターフェイス型を指定する場合、オープンジェネリック型とクローズジェネリック型の違いに注意する必要があります。 ジェネリック型の文字列表記にも注意する必要があります。 詳しくは§.ジェネリック型の型情報の解説を参照してください。
型情報からインターフェイスの代入可能性を判定する方法についてはインスタンスや型が一致するか・インターフェイスやクラスから派生しているか判定するでも詳しく解説しています。