![]() |
erweitertes Record in abgeleiteter Klasse
Hallo zusammen,
ich verwende in einer Form einen VST. Die Daten werden ja in einem Record abgelegt. Von diesem Formular erstelle ich eine abgeletete Klasse, zur Erledigung einer sehr änlichen Aufgabe. Allerdings benötige ich hier im Datenrecord des VST eine Variable mehr. Natürlich könnte man dieses Feld in dem Ursprungsrecord definieren und im Ur-VST ungenutzt lassen. Aber schöner wäre es natürlich, dieses Feld erst in der abgeleiteten Klasse einzuführen. Ist das möglich? (Gefühlsmäßig würde ich sagen es ist nicht möglich, aber ich würde mich gerne eines besseren belehren lassen.) Danke für jede Rückmeldung. |
Re: erweitertes Record in abgeleiteter Klasse
Ein Record ist halt keine Klasse
|
Re: erweitertes Record in abgeleiteter Klasse
Was dann heißt es geht nicht? Auch nicht mit 'Hilfskonstruktionen'?
|
Re: erweitertes Record in abgeleiteter Klasse
Da wäre die Variante, dies gleicjh in den Usprungsrecord einzubauen die einfachere
|
Re: erweitertes Record in abgeleiteter Klasse
Das heißt, daß Records keine Vererbungshierarchie besitzen und sowas demach auch nicht möglich ist.
|
Re: erweitertes Record in abgeleiteter Klasse
genau die gleiche Frage habe ich auch! Wenn es dafür ein Lösung gäbe, wäre das genial!
|
Re: erweitertes Record in abgeleiteter Klasse
Gibt es nicht ... ein Record läßt sich nicht nachträglich verändern.
Es ist grundsätzlich nicht möglich irgendwelche Typen in ihrer Größe nachträglich zu verändern. Selbst bei Klassen geht sowas nicht, abgesehn von den Class-Helpern, aber diese fügen nur etwas ab der aktuellen Position hinzu, ohne vorher Deklariertes nachträglich zu ändern. Genauso ist es bei Forward-Deklararionen. Das Einzige, welches möglich wäre, ist eine nachträgliche Typkonvertierung, aber dabei muß man höllisch aufpassen, daß man am Speichermanagement nicht zerschießt.
Delphi-Quellcode:
Beim VirtualTreeView wird z.B. die Variante mit dem TMyAdditionRecord für das .Data-Attribut der Nodes angewendet.
type
TMyBasisRecord = record ... variabel: record data: array[0..1023] of byte; end; end; TMyChangedRecord = record ... // genau gleiche Deklaration, wie vorher variabel: record ... // aber nicht mehr, als 1024 Byte (siehe andere Deklaration) // und Strings, dynamische Arrays, Interfaces sind verboten, // es sei denn man fügt genau an der Selben Stelle im Basis-Record // einen Dummy von gleichem Typen ein end; end; TMyAdditionRecord = record ... // aber nicht mehr, als 1024 Byte (siehe andere Deklaration) // und Strings, dynamische Arrays, Interfaces sind verboten, // es sei denn man fügt genau an der Selben Stelle im Basis-Record // einen Dummy von gleichem Typen ein end; var X: TMyBasisRecord; TMyChangedRecord(X) TMyAdditionRecord(X.variabel) |
Re: erweitertes Record in abgeleiteter Klasse
Hallo,
die Antwort "Record ist halt keine Klasse" ist doch schon fast die Lösung. Entweder du machst aus deinem Record eine Klasse im NodeDataSize (?) wäre dann SizeOf Class -> immer 4 bei 32bit ... ;) Oder du nimmst eine Hüllklasse
Delphi-Quellcode:
Du du es erweitern willst,
type
THullClass = class rec: TMyRectXXX; end; wäre jetzt
Delphi-Quellcode:
Seht doof aus, ist es auch ;)
THullClass2 = class(THullClass)
varX: Integer end; Also mache asu dem Record gleich eine Klasse. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz