使用在子类中实现的接口的抽象类?

时间:2015-02-03 13:21:07

标签: vb.net oop object interface abstract-class

我有一个使用抽象类和接口的想法,但我不确定它是否可以做我想到的以及如何做。

我有一个为设备建模的抽象类,只包含抽象功能。实现时,此类基本上用作特定设备的驱动程序。

每个设备可能具有不同的功能,我试图将功能集建模为不同的接口,这些接口可能会或可能不会由类设计者实现。

我是否有机制确定设备类的子类是否正在实现这些接口。我必须从超类中确定它,然后能够从那里调用子类中定义的函数。

这对我来说听起来不可能,但我只是好奇,如果其他人有更多的直觉,或者可能是更好的解决方案。

在下面的例子中,我已经说明了我的观点。我希望能够有一个类型为device的对象,并通过某种机制调用子类中实现的函数。

谢谢!

Public MustInherit Class Device
   Public MustOverride Sub One()

   Public Function SupportsBonding As Boolean
      'Returns true if subclass implments interface
   End Function
End Class

Public Interface Bonding
   Sub Two()
   Sub Three()
End Interface

Public Class Device1
    Inherits Device
    Implements Bonding 

    Public Sub Two()
    End Sub

    Public Sub Three()
    End Sub
End Class

1 个答案:

答案 0 :(得分:1)

您始终可以使用TypeOf关键字使用Me运算符,例如:

If TypeOf Me Is IAmSomeInterface Then
     ...
End If

即使此代码在超类中运行,它也总是会对象的运行时类型起作用,因此您将获得子类信息。

或者,如果您计划在界面上调用方法,则可以使用TryCast代替:

Dim someObject = TryCast(Me,IAmSomeInterface)
If Not someObject Is Nothing Then
     someObject.DoSomething()
End If