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