一 类的方法
新建一个类,鼠标在类上单击,为类创建方法。
VI:创建一普通的方法VI
虚拟文件夹:在类中方法较多时,可以将它们归类到不同文件夹中
属性定义文件夹:专用于保存数据读写VI的文件夹
基于动态分配模板的VI:类中方法可被子类中相同方法重写,其输入输出接线端是动态分配的
基于静态分配模板的VI:类中方法不可被子类重写
用于数据成员访问的VI:用于快速建立读写类中数据的VI。依旧是基于动态或静态分配模板的VI,不同处在于这个在程序框图上有数据读写的代码
用于重写的VI:专用于子类,以覆盖父类的方法。创建的是基于动态分配模板的VI,在程序框图上添加了调用父类同名方法的代码
类型定义:创建用户自定义控件,自定义一些在模块里可能用到的数据类型
二 基于动态/静态分配模板的VI
基于动态分配模板的VI与基于静态分配模板的VI区别:动态分配的VI输入输出接线端的动态分配的。
2.1
当类中存在基于静态分配模板的VI,其子孙类中不能有同名方法。
在父类中创建一个基于静态分配模板的VI。
这里是创建了一个叫static的VI,功能是返回一个字符串。
尝试在子类中创建一个同名的基于静态分配模板的VI。
可以发现新建的VI不可运行。
为父类和子类分别创建基于动态分配模板的同名VI。
两VI都可以正常运行。
2.2
做一个简单的测试程序,
其中橘色的是父类,黄色的是子类。
static.vi是静态分配模板的VI,被调用的永远是父类的static,返回值永远是“parent”
父类的实例调用PD返回“parent dynamic”,子类的实例调用SD返回“son dynamic”
把子类的对象的数据转换为父类的数据类型再调用dynamic.vi,这里的实例是由子类生成的,无论在程序中使用哪个祖先类的数据类型表示它,它始终是个子类实例。所以程序调用它的dynamic.vi,运行的还是子类中的dynamic.vi。只有在子类中没有实现某个基于动态分配模板的VI时,程序才调用它父类中的同名VI。
项 | 标识 |
---|---|
父类基于静态模板的VI | PS |
父类基于动态模板的VI | PD |
子类基于动态模板的VI | SD |
2.3
修改父类中的static.vi
调用父类的方法dynamic.vi
创建测试程序,使用泛化成父类类型的子类调用这个static.vi
虽然子类中没有static.vi,确定被调用的是父类中的static.vi,但由于传入的实例属于子类,父类中的static.vi调用的依旧是子类中的dynamic.vi
一个基于动态分配模板的vi,即使在其他类的vi中被调用,运行的依旧是实例所属类中的方法。
2.4
在子类调用父类中的同名方法时,需要通过编程-簇,类与变体-调用父类方法这个节点调用父类方法,直接将父类方法拖拽到程序框图是无效的。
在新建“用于重写的vi”时,系统会自动把这个节点加到新生成的程序框图。
此程序返回的是父类同名方法返回的数据