![]() |
Record zurücksetzen (löschen)
Delphi-Quellcode:
Hi,
// Beispiel:
type TMyRecord = record Test_1: string; Test_2: string; Test_3: string; Integer_1: integer; Integer_2: integer; end; ... MyRecord: TMyRecord; da ich bei meiner Suche nichts gefunden habe, ahne ich, dass ich da selbst Hand angelegt muss. Aber dennoch die Frage: Gibt es eine Delphi-Funktion um ein Record zu löschen? Also sowas wie MyRecord := nil? :gruebel: Guido. Edit: Ein Demo der Lösung, für die ich mich entschieden habe, befindet sich in ![]() . |
Re: Record zurücksetzen (löschen)
Die Delphi-Hilfe:
Code:
[edit=Luckie]Neu abgschickt. Mfg, Luckie[/edit]
Records (erweiterte)
Zusätzlich zu den traditionellen Record-Typen lässt die Delphi-Sprache komplexere und “klassenähnliche” Record-Typen zu. Zu den Feldern können Records Eigenschaften und Methoden (einschließlich Konstruktoren), Klasseneigenschaften, Klassenmethoden, Klassenfelder und verschachtelte Typen haben. Weitere Informationen hierzu finden Sie in der Dokumentation zu Klassen und Objekten. Im Folgenden finden Sie eine Beispiel-Record-Typdefinition mit einigen “klassenähnlichen” Merkmalen. Obwohl Records nun einige der Merkmale von Klassen besitzen, gibt es wichtige Unterschiede zwischen Klassen und Records. Records unterstützen keine Vererbung. Records können variante Teile enthalten; Klassen nicht. Records sind Wertetypen, daher werden Sie bei der Zuweisung kopiert, per Wert übergeben und dem Stack zugewiesen, wenn sie nicht als global definiert sind oder explizit mit den Funktionen New und Dispose zugewiesen werden. Klassen sind Referenztypen, daher werden Sie bei der Zuweisung nicht kopiert, per Referenz übergeben und dem Heap zugewiesen. Records ermöglichen das Überladen von Operatoren auf Win32- und .NET-Plattformen; Klassen ermöglichen das Überladen von Operatoren nur bei .NET. Records werden automatisch mit einem Standardkonstruktor ohne Argumente erzeugt, Klassen dagegen müssen explizit erzeugt werden. Weil Records einen argumentlosen Standardkonstruktor haben, muss jeder benutzerdefinierte Record-Konstruktor ein oder mehr Parameter haben. Record-Typen können keine Destruktoren haben. Virtuelle Methoden (die mit den Schlüsselwörtern virtual, dynamic und message angegeben werden) dürfen in Record-Typen nicht verwendet werden. Im Gegensatz zu Klassen können Record-Typen auf der Win32-Plattform keine Schnittstellen implementieren; auf der .NET-Plattform können Records jedoch Schnittstellen implementieren. |
Re: Record zurücksetzen (löschen)
Warum schrummpelt den die Forum-Fensterdarstellung bei mir so zusammen?
Zum Thema: Ist da jetzt schon eine Antwort auf meine Frage drin? Dann bitte ein wenig genauer eingrenzen. Danke, Guido. |
Re: Record zurücksetzen (löschen)
Zitat:
Zitat:
|
Re: Record zurücksetzen (löschen)
Hallo, du könntest Finalize + FillChar verwenden, um deinen Record zu "löschen":
Delphi-Quellcode:
Oder du verwendest einen "BlankRecord". Vorteil: Du bestimmst selber die Werte, welche die Felder erhalten sollen.Finalize(MyRecord); FillChar(MyRecord, SizeOf(MyRecord), 0);
Delphi-Quellcode:
const
MyBlankRecord : TMyRecord = (Test_1: ''; Test_2: ''; Test_3: ''; Integer_1: 0; Integer_2: 0); begin MyRecord := MyBlankRecord; end; |
Re: Record zurücksetzen (löschen)
Was heißt den löschen?
|
Re: Record zurücksetzen (löschen)
Alle Felder leeren wahrscheinlich.
|
Re: Record zurücksetzen (löschen)
Man könnte den ersten Vorschlag von toms sogar noch etwas erweitern:
Delphi-Quellcode:
In der Methode Clear müssen vor dem abschließenden FillChar-Befehl alle (dynamischen) Daten im Record freigegeben werden. Finalize selbst berücksichtigt nur die referenzgezählten Daten. Speicherbereiche, die mit New o.ä. angelegt wurden, sowie Objekte, die durch Aufruf eines Konstruktors erzeugt wurden, muss man also auch manuell freigeben.
type
TMyRecord = record Test_1 : string; Test_2 : string; Test_3 : string; Integer_1 : Integer; Integer_2 : Integer; procedure Clear; end; procedure TMyRecord.Clear; begin Finalize (Self); FillChar (Self, SizeOf(Self), 0); end; // Anwendung: var MyRecord : TMyRecord; begin MyRecord.Clear; end; Gruß Hawkeye |
Re: Record zurücksetzen (löschen)
Mist an FillChar habe ich nicht gedacht.
|
Re: Record zurücksetzen (löschen)
Wenn er mit FillChar das Record löscht, dann werden aber die "Strings" da drin nicht wirklich überschrieben, sondern nur die Pointer, oder seh ich das jetzt falsch?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 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 by Thomas Breitkreuz