【问题标题】:Test if an object implements an interface测试一个对象是否实现了一个接口
【发布时间】:2010-11-24 12:29:30
【问题描述】:

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

谢谢。

【问题讨论】:

  • 这是一个很好的问题,与我在 google 中的搜索查询完全匹配并且有答案。

标签: vb.net


【解决方案1】:

使用TypeOf...Is

If TypeOf objectParameter Is ISpecifiedInterface Then
    'do stuff
End If 

【讨论】:

  • 请注意,如果“do stuff”需要调用对象上的接口成员,您可能希望使用“As”进行强制转换,然后确保对象“IsNot Nothing”。 (这可以防止不必要的第二次施法。)
【解决方案2】:

requiredInterface.IsAssignableFrom(representedType)

requiredInterface和representedType都是类型

【讨论】:

    【解决方案3】:

    我还发现 Scott 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
    

    【讨论】:

      【解决方案4】:

      我有一个List(Of String),而TypeOf tmp Is IList 返回False。 List(Of T) 实现了多个接口(IEnumerable、IList、...),并且只检查一个需要在 VB 中使用以下 sn-p:

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

      【讨论】:

        【解决方案5】:

        这里有一个简单的方法来判断一个给定的对象变量“o”是否实现了一个特定的接口“ISomething”:

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

        【讨论】:

          猜你喜欢
          • 2012-12-29
          • 2012-06-09
          • 2010-10-20
          • 2019-08-03
          • 2015-08-19
          • 2018-11-16
          • 2012-08-22
          • 2010-11-10
          相关资源
          最近更新 更多