Вопрос
У меня есть массив объектов базового класса, в который я привел множество различных объектов дочерних классов и передаю его в sub vi.Есть ли способ узнать исходный тип объекта каждого отдельного элемента массива?
Спасибо ...
Решение
Для потомков это было перенесено на ЛАВА форумы.Пользователь Aristos Queue, один из разработчиков собственных объектно-ориентированных функций LabVIEW, ответил следующее:
Рекомендуемым способом решения этой проблемы является использование метода динамической отправки в каждом классе, хотя рекомендуется создать метод, который будет делать все, что вы пытаетесь сделать.Я предполагаю, что вы думаете о методе динамической отправки, который возвращает имя или идентификатор объекта, чтобы вы могли сказать: «Это равно этому?Хорошо, тогда это должен быть этот класс...», а затем вы выполняете Действие X, если это тот класс.Если вы напишете метод динамической диспетчеризации ActionX.vi, а затем соответствующим образом переопределите его, вы сэкономите на производительности и вам будет гораздо легче поддерживать код в будущем.
Вы также можете использовать узел Более конкретный, чтобы проверить, может ли данный объект быть приведен к заданному типу — это позволяет проводить тестирование наследования, а не сравнение имени или идентификатора, которое обеспечивает только эквивалентность типов.Если узел To More Special возвращает ошибку, значит, он не относится к типу назначения.
Итак, ваши варианты (в порядке предпочтения):
- метод динамической отправки, который выполняет действие
- Более конкретный узел для проведения типового тестирования
- метод динамической отправки, который возвращает имя/идентификатор класса объекта
- Получить путь к LabVIEW Object.vi (поставляется в vi.lib в LabVIEW 8.5, но не добавляется в палитры до версии LabVIEW 8.6)
Другие советы
у НИ хороший обзор ЛВООП это обязательно к прочтению, поскольку объектно-ориентированный подход реализован в LabVIEW уникальным способом.
Вы пробовали 'к более общему классу' и 'к более конкретному классу' функции на палитре управления приложением?