Я пытаюсь перестроить некоторые старые QBASIC (да, вы читаете эти права) программы для использования на более современных системах (потому что почему-то дети в эти дни не любят DOS).Интерфейсы/Классы/Объекты и наследование
Я понимаю основные принципы классов и объектов (я думаю), но я, очевидно, что-то пропустил.
У меня есть ряд инструментов, которые управляются с использованием GPIB, используя библиотеки VISA COM. Я могу заставить его работать, но код очень некрасиво :(
Для того, чтобы использовать инструмент, я следующий в моем классе Public Main:
Public ioMgr As Ivi.Visa.Interop.ResourceManager
Dim myInstrument As New Ivi.Visa.Interop.FormattedIO488
Dim myInstOpen As Boolean
Потом, когда я пришел к запуску, инструмент (в «» ИНИЦИАЛИЗИРУЙТЕ кнопку мыши суб), я использую:
Try
myInstrument.IO = ioMgr.Open("GPIB0::17")
Catch exOpen As System.Runtime.InteropServices.COMException
myInstOpen = False
End Try
Довольно простой вещи, если прибор не может быть открыт по адресу 17 на GPIB0, он бросает исключение, которое попадается и наборы флаг 'myInstOpen' равен false.
Тогда, я могу общаться с инструментом с помощью команд из интерфейса Ivi.Visa.Interop.FormattedIO488, такие как:
myInstrument.IO.ReadSTB()
result = myInstrument.ReadString()
myInstrument.WriteString("GPIB Command Here")
И все это работает.
Что я хочу сделать, создайте общий класс «Инструмент», который позволяет мне получить доступ ко всем функциям интерфейса 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(), так что я могу немного настроить вывод.
НО когда я пытаюсь сделать это, я не могу наследовать от интерфейса (потому что это интерфейс), и я не могу реализовать интерфейс, потому что он говорит, что мой класс должен реализовать каждый функции, которые предоставляет интерфейс. Мне не нужны все эти функции, а также я не могу разобраться, как все это записывать в мой класс (у них есть куча случайных вещей, в которых я не понимаю LOL).
Если кто-то может увидеть, куда я происхожу из и может предложить несколько советов, я бы очень признателен =)
Когда вы говорите, что вы «не можете реализовать интерфейс», какой интерфейс вы имеете в виду? Есть ли другая реализация этого интерфейса, к которой вы хотите добавить функциональность, или вы сами реализуете интерфейс самостоятельно? –
Привет, Дэвид, я имею в виду интерфейс Ivi.Visa.Interop.FormattedIO488. я могу реализовать интерфейс таким способом: Dim myInstrument Как Новый Ivi.Visa.Interop.FormattedIO488 Но тогда я не могу добавить дополнительные свойства к нему, такие как адрес –
И когда я использую Открытый класс GPIBInst Реализует Ivi.Visa.Interop.FormattedIO488 Он просит меня реализовать каждую функцию из интерфейса = ( –