質問
多くの異なる子クラスオブジェクトを型キャストし、サブviに渡している基本クラスオブジェクト配列があります。配列内の個々の要素のオブジェクトの元のタイプを見つける方法はありますか?
ありがとう...
解決
後世のために、これは LAVA フォーラム。 LabVIEWのネイティブOO機能の開発者の1人であるユーザーAristos Queueは、次のように答えました:
これを処理するには、すべてのクラスで動的ディスパッチメソッドを使用することをお勧めしますが、お勧めの方法は、実行しようとしていることをすべて実行するメソッドを作成することです。オブジェクトの名前またはIDを返す動的ディスパッチメソッドを考えているのではないかと推測しているので、「これは等しいですか?」 OK、それはこのクラスでなければなりません..."そのクラスであれば、アクションXを実行します。ダイナミックディスパッチメソッドActionX.viを記述し、それを適切にオーバーライドすると、パフォーマンスを節約し、将来のコードメンテナンスの時間を大幅に節約できます。
特定のオブジェクトを特定のタイプにダウンキャストできるかどうかをテストするために、より詳細なノードを使用することもできます-これにより、型の等価性のみを行う名前またはIDの比較とは対照的に、継承テストが可能になります。 To More Specificノードがエラーを返した場合、それは宛先タイプではありません。
オプションは次のとおりです(優先順):
- アクションを実行する動的ディスパッチメソッド
- 型テストを行うためのより具体的なノードへ
- オブジェクトのクラスの名前/ IDを返す動的ディスパッチメソッド
- LabVIEW Object.viのパスを取得(LabVIEW 8.5のvi.libに含まれていますが、LabVIEW 8.6までパレットに追加されていません)
他のヒント
NIには LVOOPの概要があります。 OOはLabVIEWのユニークな方法で実装されているため、必読です。
「より一般的なclass 'および' より具体的にクラス '、アプリケーションコントロールパレット上で機能しますか?