我有一个基类对象数组,我将许多不同的子类对象类型转换到其中,并将其传递给子 vi。有什么方法可以找出数组中每个元素的对象的原始类型?
谢谢 ...
对于后代,这被交叉发布到LAVA论坛。用户 Aristos Queue 是 LabVIEW 原生 OO 功能的开发者之一,他回答如下:
在每个类中使用动态调度方法是处理此问题的推荐方法,尽管建议是创建一个方法来执行您尝试执行的任何操作。我猜你正在考虑一个动态调度方法,它返回对象的名称或 ID,所以你可以说,“它等于这个吗?好的,那么它一定是这个类......”然后你如果是那个班级,请执行动作 X。如果您编写一个动态调度方法 ActionX.vi 然后适当地覆盖它,您将节省性能并在将来有更容易的时间进行代码维护。
您还可以使用 To More Specific 节点来测试给定对象是否可以向下转换为给定类型——这允许进行继承测试,而不是只进行类型等效的名称或 ID 比较。如果 To More Specific 节点返回错误,则它不是目标类型。
所以你的选择是(按优先顺序):
- 执行动作的动态调度方法
- 到更具体的节点做类型测试
- 动态调度方法,返回对象类的名称/ID
- 获取 LabVIEW Object.vi 的路径(在 LabVIEW 8.5 中的 vi.lib 中提供,但直到 LabVIEW 8.6 才添加到选项板中)
NI对 LVOOP 有很好的概述,这是一本必读的书,因为 OO 以 LabVIEW 的独特方式实现。
您是否在应用程序控制面板上尝试过“ to more generic class ”和“ to more specific class ”功能?