08-23-2018 04:13 AM
Hallo vom nördlichsten Punkt der Donau!
Ich plag mich gerade rum, um Daten(Inhalte) der Elternklasse in der abgeleiteten Kindklasse zur Verfügung zu stellen.
(Struktur:"ScreenShot00188.png", Klassenhierarchie: ScreenShot00189.png)
"ScreenShot00187.png" zeigt die Daten der Eltern-Klasse "Data" (einmal eine QUEUE-Referenz und ein Textelement).
"ScreenShot00190.png" ist das Beispiel, in dem zuerst in der Klasse "Data" die Werte gesetzt werden um danach in der Kindklasse "Deiring" die Inhalte zu holen. Leider sind weder die Referenz der QUEUE noch das Textelement verfügbar.
Wie müssen im Projekt die Klassen bzw. die Vererbung eingestellt werden, dass die Inhalte in der Kindklasse verfügbar ist? (Projekt ist in "SRQ3169448.zip")
Herzlichen Dank!
Waldif
Solved! Go to Solution.
08-23-2018 06:12 AM
Hallo,
das Problem ist nicht das schreiben und lesen der Daten sondern dass du in test.vi versuchsts ein Objekt von der Klasse "Daten" in ein Objekt der Klasse "Deiring" umzuwandeln. Ein Kind kann immer in eine Elternklasse gecasted werden, andersherum geht das nicht! Wenn du automatische Fehlerbehandlung in den VI einstellungen von "test.vi" anstellst wirst du auch sehen, dass die "Runtime Klasse erhalten" funktion einen Fehler erzeugt.
Ich habe eine korrigierte Version als Snippet angefügt.
lG
08-23-2018 06:45 AM
Hallo!
Vielen Dank für die Antwort. Mein Problem ist, dass die Kindklassen eigentlich keine eigenen Daten haben sollten, sondern sich die Kindklassen ausschließlich der Daten der obersten Elternklasse ("DATA") bedienen sollen.
Aus der Tatsache, dass ein Kind immer in der Elternklasse gecastet wird, muss ich bei zwei parallelen Kindklassen (z. b. hier die Klasse "Deiring" und die Klasse "Magtrol") in den Kindklassen mit einem Set-Befehl die Inhalte setzen, damit diese dort aktualisiert werden.
VG - Waldif
08-23-2018 08:04 AM
Ok ich habe jetzt verstanden was du machen willst. Du willst die gleichen Daten (Queue und Text) von beiden Klassen "Deiring" und "Magtrol" lesen. Das funktioniert nie über eine Eltern Kind Beziehung zwischen Klassen (nicht in Labview und auch nicht in irgendeiner anderen Sprache). Wenn du ein Deiring Objekt A erzeugst ist A auch immer ein Objekt von Typ der Elternklasse "DATA". D.h. wenn du nun zusätzlich ein Ojekt B der Klasse Magtrol erzeugst hast du ein weiteres undabhängiges Objekt der Elternklasse "DATA". Also Insgesammt:
- A ist Objekt der Klasse Deiring und DATA
- B ist Objekt der Klasse Magtrol und DATA
Du hat also 2 verschiedene Ojekte vom TYp DATA die auch verschiedene Queue und String werte enthalten können.
Es gibt verschiedene Wege dein Problem richtig zu lösen. Der Beste hängt davon ab was das Program am Ende machen sollen. DATA sollte auf jeden Fall nicht die Elternklasse von Magtrol und Deiring sein. Eine Möglichkeit wäre folgende:
- Objekt A der Klasse Deiring (kein Kind von Data!)
- Objekt B der Klasse Magtrol (kein Kind von Data!)
- Objekt C der Klasse Data (enthält Queue und Text)
Dann kannst du von Objekt A und B auf C zugreifen und die Queue und den Text lesen. Diese sind dann auch gleich weil es auch nur ein Objekt C gibt!
08-23-2018 10:05 AM - edited 08-23-2018 10:06 AM
1. Die Definition von eine Klasse (was im Projekt einsehbar ist) ist eine Klasse.
2. Sobald Du eine Instanz davon auf dem BD oder FP hast, ist es ein Objekt.
Wenn Du zwei Objekte brauchst, kannst Du einfach zwei Konstante platzieren. Danach hast Du zwei unabhängige Versionen von der gleichen Klasse. Sie sind auf keinster Weise verlinkt (die Daten).
Kannst Du vielleicht beschreiben was Du machen willst? Sollen alle Kinder auf der gleichen Datensatz zugreifen?
08-27-2018 02:38 AM
Ich hab mich nochmals kundig gemacht und festgestellt, dass das, was ich vorhabe, nicht so geht.
Meine Lösung: Die Daten in einer eigenen unabhängigen Datenklasse und die per Queue durch die Anwendung verfügbar machen. Ob auch eine FGV ginge, müsste ich noch prüfen.
Aber vielen dank für die Unterstützung - mein Problem scheint eine Lösung gefunden zu haben.