2009-09-01 17 views
36

オブジェクトパラメータがあり、オブジェクトがvb.netで指定されたインタフェースを実装しているかどうかを確認する必要があります。これをテストするには?オブジェクトがインタフェースを実装しているかどうかのテスト

ありがとうございました。

+4

これはすばらしい質問です。Googleの検索クエリと正確に一致し、答えがあります。 – CodingBarfield

答えて

52

使用TypeOf...Is

If TypeOf objectParameter Is ISpecifiedInterface Then 
    'do stuff 
End If 
+1

"do stuff"がオブジェクトのインターフェイスのメンバーを呼び出す必要がある場合は、おそらく 'As'を使用してオブジェクト 'IsNot Nothing'をキャストして保証したいとします。 (これにより、不要な2回目のキャストが防止されます)。 – bobbymcr

3

requiredInterface.IsAssignableFrom(representedType)

requiredInterfaceとrepresentedTypeの両方がタイプです

3

私はまた、スコットHanslemanことで、このarticleが、この場合に特に有用であることが判明。その中で、彼は私がやってしまった

C#

if (typeof(IWhateverable).IsAssignableFrom(myType)) { ... } 

をお勧めします。

VB.Net

Dim _interfaceList As List(Of Type) = myInstance.GetType().GetInterfaces().ToList() 
If _interfaceList.Contains(GetType(IMyInterface)) Then 
    'Do the stuff 
End If 
0

私はList(Of String)TypeOf tmp Is IList戻りFalseを持っています。 (Tの)リストは、複数のインターフェース(IEnumerableを、IListのを、...)を実装し、一つだけをチェックすることはVBで次のコードを必要とする:

If tmp.GetInterfaces().Contains(GetType(IEnumerable)) Then 
    // do stuff... 
End If 
1

ここで指定されたオブジェクト変数かどうかを判断する簡単な方法「Oであり特定のインターフェース「ISomething」を実装しています。

If o.GetType().GetInterfaces().Contains(GetType(ISomething)) Then 
    ' The interface is implemented 
End If 
関連する問題