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