如何在LabVIEW中设置我的类,以便我可以在父类中的不同子类之间保留所有公共数据,并仍然从子类的Initialize(data)
方法初始化该数据?
我有一个相当大的项目,我使用LabVIEW面向对象编程(LVOOP)工具来简化一些事情。我有一个看起来像这样的类树:
理想情况下,我想要保留GenericThing
类中所有事物之间的所有数据,但随后将该数据与类一起初始化Initialize(data)
和ThingType1
的唯一ThingType2
方法中的特定数据。由于特定于类的数据在两个类之间是不同的,并且需要初始化此数据,因此我不能对所有Initialize(data)
方法使用相同的签名。
在Java中,我可以这样做:
class abstract GenericThing {
protected String name;
public GenericThing(String name) {
this.name = name;
}
}
class ThingType1 extends GenericThing {
private int awesomeness; // additional data
public ThingType1(String name, int awesomeness) {
super(name);
this.awesomeness = awesomeness;
}
}
class ThingType2 extends ThingType2 {
private Boolean isSuperCool; // different additional data
public ThingType2(String name, Boolean isSuperCool) {
super(name);
this.isSuperCool = isSuperCool;
}
但是对于我的生活,我无法弄清楚如何在LabVIEW中做类似的事情。
我试图从几个角度来解决这个问题。首先,我尝试在我的Initialize(data)
类中创建GenericThing
动态调度方法,然后在子类中重写它,但如果您尝试更改方法的签名(不同的输入/输出),则会出错):
好的,所以我无法这样做。接下来,我尝试为
GenericThing
类创建数据成员访问方法并从子类中调用它们,但我无法弄清楚如何以实际设置数据的方式调用它们。我的尝试:
基本上使用To More Generic Class
VI获取对父类的引用,并使用我为GenericThing
创建的成员访问方法设置其数据。这个版本运行得很好,但是当我尝试初始化父数据和子数据然后读回那些数据时(类似地使用To More Generic Class
和我的数据成员访问方法来读取父数据),我没有得到父母的数据。
答案 0 :(得分:1)
我在写这篇文章的过程中发现了一些有用的东西,但这让我头疼不已,以至于我不想放弃我的帖子。这个问题几乎就在我身边。基本上,当我在GenericThing
ThingType1
方法中初始化Initialize
数据时,我需要重新投射GenericThing
数据成员的输出访问ThingType1
对象的方法,初始化其数据,然后将其传递出去(编辑:我不需要重新传输此数据。我可以直接将子类型引用传递给父类型方法。下面更新的方框图):
我可以类似地将子类型引用直接传递给Get Data
方法中的父类型方法:
最后,我可以通过从VI调用这些方法来初始化和读取我的数据:
使用一些随机输入值运行它的结果:
Tadaa!如果你有更好的方法,请告诉我。
我根据评论中的一些反馈更新了我的框图。这对我解决问题的尝试有了很大的改进:我可以直接将孩子的引用连接到父类型的方法,而不用处理混乱我的图表的向上/向下翻译语法! / p>