接口/类/对象和继承

时间:2014-10-28 22:59:23

标签: vb.net oop object inheritance interface

我正在尝试重建一些旧的QBASIC(是的,你读的是正确的)程序,用于更现代的系统(因为某些原因,这些天孩子们不喜欢DOS)。

我理解类和对象的基本原理(我认为),但我显然错过了一些东西。

我有许多使用VIB COM库控制的仪器。我可以使它工作,但代码非常难看:(

为了使用乐器,我的公共班级主要内容如下:

Public ioMgr As Ivi.Visa.Interop.ResourceManager
Dim myInstrument As New Ivi.Visa.Interop.FormattedIO488
Dim myInstOpen As Boolean

然后,当我开始初始化乐器时(在'Initialize'按钮中单击sub),我使用:

Try
    myInstrument.IO = ioMgr.Open("GPIB0::17")
Catch exOpen As System.Runtime.InteropServices.COMException
    myInstOpen = False
End Try

相当简单的东西;如果无法在GPIB0上的地址17处打开该工具,则会抛出异常,该异常会被捕获并将“myInstOpen”标志设置为false。

然后,我可以使用来自Ivi.Visa.Interop.FormattedIO488界面的命令与仪器进行通信,例如:

myInstrument.IO.ReadSTB()
result = myInstrument.ReadString()
myInstrument.WriteString("GPIB Command Here")

所有这些都有效。

我想要做的是,创建一个通用的“Instrument”类,允许我从Ivi.Visa.Interop.FormattedIO488接口和Ivi.Visa.Interop.ResourceManager接口访问所有函数,但是也允许我建立自己的班级。

例如:

Public Class GPIBInst
Implements Ivi.Visa.Interop.FormattedIO488
  Public Address As Integer
    Public Sub setAddress(ByVal Addr As Integer)
        Address = Addr
    End Sub
    Public Function getAddress() As Integer
        Return Address
    End Function
    Public Function readIO() As String
        Dim Data As String = me.ReadString()
        Dim Result As String = mid(Data,2,7)
        Return Result
    End Function
End Class

这将允许我使用界面中的功能,还可以为程序内的其他有用的东西自定义乐器。例如,GPIBInst.Address需要在其他地方使用,并且可以使用GPIBInst.readIO()而不是通用的ReadString(),以便我可以稍微自定义输出。

当我尝试这样做时,我无法从界面继承(因为它是一个界面)而我无法实现接口,因为它说我的类需要实现接口提供的每个单独的功能。我不想要所有这些功能,而且,我也无法解决如何将它们全部写入我的课程中(他们有大量随机的东西,我不明白大声笑)。

如果有人能看到我来自哪里可以提供一些建议,我真的很感激=)

1 个答案:

答案 0 :(得分:0)

接口应该代表一组连贯的功能;实现它的一部分但不是全部违反了​​概念的意图。话虽如此,面向对象语言中的API通常将非OO系统包装为仅定义一个大型接口,而不是将功能分解为逻辑子组并为每个组定义接口。如果这是您的情况,并且您想要实现接口,那么您别无选择,只能从接口实现每个方法(尽管您可以为任何您不想完全实现的方法抛出NotImplementException,只要这样做不会阻止你的班级正常运作。)