我正在尝试重建一些旧的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(),以便我可以稍微自定义输出。
但当我尝试这样做时,我无法从界面继承(因为它是一个界面)而我无法实现接口,因为它说我的类需要实现接口提供的每个单独的功能。我不想要所有这些功能,而且,我也无法解决如何将它们全部写入我的课程中(他们有大量随机的东西,我不明白大声笑)。
如果有人能看到我来自哪里可以提供一些建议,我真的很感激=)
答案 0 :(得分:0)
接口应该代表一组连贯的功能;实现它的一部分但不是全部违反了概念的意图。话虽如此,面向对象语言中的API通常将非OO系统包装为仅定义一个大型接口,而不是将功能分解为逻辑子组并为每个组定义接口。如果这是您的情况,并且您想要实现接口,那么您别无选择,只能从接口实现每个方法(尽管您可以为任何您不想完全实现的方法抛出NotImplementException,只要这样做不会阻止你的班级正常运作。)