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