测试一个对象是否实现了一个接口

47

我有一个对象参数,需要检查该对象是否实现了指定接口,在 vb.net 中如何进行测试?

谢谢。


5
这是一个很好的问题,与我在谷歌搜索中输入的内容完全匹配,并且有一个答案。 - CodingBarfield
5个回答

67

使用 TypeOf...Is

If TypeOf objectParameter Is ISpecifiedInterface Then
    'do stuff
End If 

2
请注意,如果“做一些事情”需要在对象上调用接口的成员,则可能需要使用“As”进行转换,然后确保对象“不是Nothing”。(这可以避免不必要的第二次转换。) - bobbymcr

8
我发现Scott Hansleman的文章对此非常有帮助。他推荐使用以下方法: 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

4

以下是一种简单的方法,用于确定给定的对象变量“o”是否实现了特定接口“ISomething”:

If o.GetType().GetInterfaces().Contains(GetType(ISomething)) Then
    ' The interface is implemented
End If

4

requiredInterface.IsAssignableFrom(representedType)

其中requiredInterface和representedType都是类型(Types)


0

我有一个 List(Of String),而 TypeOf tmp Is IList 返回 False。List(Of T) 实现了多个接口(IEnumerable、IList 等),仅检查其中一个需要在 VB 中使用以下代码片段:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接