![]() |
Re: Erklärung von record (Delphihilfe unverständlich :))
Zitat:
|
Re: Erklärung von record (Delphihilfe unverständlich :))
Spätestens seit BDS 2006 kann man in Records auch Methoden verwenden.
Zitat:
Delphi-Quellcode:
verändert alle vier Bytes (A=255 und R,G,B = 0), während
myARGB.Value:=$000000FF;
Delphi-Quellcode:
Nur das eine Byte (Das zweite von rechts :mrgreen:) verändert.
myARGB.R:=255;
Ein 'Record' ist imho ein Überbleibsel aus den Anfängen der strukturierten Programmierung. Um alle Bits eines Bytes (in Standardpascal) anzusprechen, blieb nur dieses Konstrukt (AND/OR auf Byte-Ebene ging nicht, einer der Gründe warum es dann mal 'Turbopascal 1.0' gab):
Delphi-Quellcode:
Das 'packed' veranlasst(e) den Compiler, das Record so dicht wie möglich zu packen. Da ein Boolean genau ein Bit benötigt, ein Nibble (0..15) genau 5 bits, kann man so bei einem Byte sowohl auf die Nibbles (halbe Bytes) als auch auf die einzelnen Bits zugreifen. Leider klappt das mit dem Packed heute nicht mehr.
Type
TNibble = 0..15; TBitsNibblesAndByte = Packed Record Case Integer Of 0 : (TheByte : 0..255); 1 : (TheNibbles : Array [0..1] Of TNibble); 2 : (The Bits : Array [0..7] Of Boolean); End; Bei der Programmierung von Treibern (ja ja, ging früher, unter Win32 nicht mehr so leicht) sind häufig die Statusinformationen in den einzelnen Bits eines Statusbytes/Wortes kodiert. Durch die Deklaration eines geeigneten 'Packed Records' konnte man dann sehr elegant auf die einzelnen Informationen zugreifen. Heute verwendet man Masken und AND bzw. OR Soweit ich weiss (bin aber C-Laie), dürfte das heute in C auch noch gehen, das weiss ich aber nicht. |
Re: Erklärung von record (Delphihilfe unverständlich :))
@mkinzler: Wenn ich mich nicht irre, können records seit D2006 auch Methoden besitzen.
Man könnte records entfernt mit Klassen vergleichen, jedoch müssen Klassen instantiiert und freigegeben werden, das heißt der Programmierer muss sich darum kümmern, dass der Konstruktor vor dem ersten Zugriff aufgerufen wurde und dass die Klasse auch wieder freigegeben wird. Records hingegen werden von Delphi selbst verwaltet, auf die kann man also immer sofort zugreifen. Records können auch sehr leicht abgespeichert oder in Strömen verschickt werden. Sie können Methoden besitzen (ab D2006), aber verfügen IMHO nicht über Vererbung, Kapselung und das ganze Zeug drumherum. |
Re: Erklärung von record (Delphihilfe unverständlich :))
Zitat:
|
Re: Erklärung von record (Delphihilfe unverständlich :))
@3von8: Schön, den wichtigsten Unterschied hast du vergessen ;) .
Records sind Wertetypen, Klassen Referenztypen. Das ist der einzige Grund, warum Records noch nicht veraltet sind. In den übrigen Unterschieden gleichen sich beide Typen langsam aneinander an - natürlich beide in Richtung OOP: Records/Structs/... bekommen Methoden, Properties, Events und Konstruktoren, sogar ein wenig Vererbung durch Interfaces, Klassen werden genauso einfach verwaltbar wie Records. @mkinzler: Nein, meint er nicht ;) . |
Re: Erklärung von record (Delphihilfe unverständlich :))
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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