Domanda
Ho un array di oggetti di classe base in cui ho scritto a macchina molti diversi oggetti di classe figlio e lo sto passando a un sub vi. Esiste un modo per scoprire il tipo originale dell'oggetto di ogni singolo elemento dell'array?
Grazie ...
Soluzione
Per i posteri, questo è stato indirizzato al LAVA . L'utente Aristos Queue, uno degli sviluppatori delle funzionalità OO native di LabVIEW, ha risposto con il seguente:
L'uso di un metodo di invio dinamico in ogni classe è il modo consigliato di gestirlo, sebbene la raccomandazione sia quella di creare un metodo che faccia qualunque cosa tu stia cercando di fare. Immagino che stai pensando a un metodo di invio dinamico che restituisce un nome o un ID dell'oggetto in modo da poter dire "È uguale a questo? Ok, allora deve essere questa classe ... " e poi fai Action X se è quella classe. Se si scrive un metodo di invio dinamico ActionX.vi e lo si sovrascrive in modo appropriato, si risparmierà sulle prestazioni e si avrà molto più tempo per la manutenzione del codice in futuro.
Puoi anche utilizzare il nodo A più specifico per verificare se un determinato oggetto può essere trasferito a un determinato tipo: ciò consente il test di ereditarietà rispetto al confronto tra nome o ID che fa solo equivalere al tipo. Se il nodo A più specifico restituisce un errore, non è del tipo di destinazione.
Quindi le tue opzioni sono (in ordine di preferenza):
- metodo di invio dinamico che esegue l'azione
- A nodo più specifico per eseguire il test del tipo
- metodo di invio dinamico che restituisce nome / ID della classe dell'oggetto
- Ottieni percorso di LabVIEW Object.vi (spedito in vi.lib in LabVIEW 8.5 ma non aggiunto alle palette fino a LabVIEW 8.6)
Altri suggerimenti
NI ha una buona panoramica di LVOOP che è una lettura obbligata, poiché OO è implementato in modo unico per LabVIEW.
Hai provato " a più generico class "e" a più specifici class ", nella palette di controllo dell'applicazione?