AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Erklärung von record (Delphihilfe unverständlich :))

Erklärung von record (Delphihilfe unverständlich :))

Ein Thema von ErdNussLocke · begonnen am 1. Nov 2006 · letzter Beitrag vom 2. Nov 2006
Antwort Antwort
Seite 4 von 4   « Erste     234
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#31

Re: Erklärung von record (Delphihilfe unverständlich :))

  Alt 2. Nov 2006, 11:28
Zitat:
da ich noch kein "fortgeschrittener" bin, wollte ich mal die frage stellen, ob die records dann so etwas ähnliches wie eine klasse ist?
Nein. Da sie keine Methoden besitzen. Records werden auch heterogene Bereichsvariablen oder Strukturen bezeichnet.
Markus Kinzler
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#32

Re: Erklärung von record (Delphihilfe unverständlich :))

  Alt 2. Nov 2006, 11:55
Spätestens seit BDS 2006 kann man in Records auch Methoden verwenden.

Zitat von 3_of_8:
Beispiel:
Delphi-Quellcode:
type
  TARGB=record
  case Integer of
  0: (Value: Integer);
  1: (A, R, G, B: Byte);
  end;

//...
myARGB.Value:=$000000FF;
//...ist das gleiche wie...
myARGB.R:=255;
Nee. Nicht ganz (aber das weisst Du selber). Die Zeile
myARGB.Value:=$000000FF; verändert alle vier Bytes (A=255 und R,G,B = 0), während
myARGB.R:=255; Nur das eine Byte (Das zweite von rechts ) verändert.

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:
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;
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.

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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#33

Re: Erklärung von record (Delphihilfe unverständlich :))

  Alt 2. Nov 2006, 11:57
@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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#34

Re: Erklärung von record (Delphihilfe unverständlich :))

  Alt 2. Nov 2006, 12:04
Zitat:
@mkinzler: Wenn ich mich nicht irre, können records seit D2006 auch Methoden besitzen.
Du meinst class operators, daß sind aber imho keine richtigen Methoden und machen aus einem Record keine Klasse.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#35

Re: Erklärung von record (Delphihilfe unverständlich :))

  Alt 2. Nov 2006, 12:08
@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 .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#36

Re: Erklärung von record (Delphihilfe unverständlich :))

  Alt 2. Nov 2006, 12:16
Zitat von Die Delphi-Hilfe:
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.
Delphi-Quellcode:
type
  TMyRecord = record
    type
      TInnerColorType = Integer;
    var
      Red: Integer;
    class var
      Blue: Integer;
    procedure printRed();
    constructor Create(val: Integer);
    property RedProperty: TInnerColorType read Red write Red;
    class property BlueProp: TInnerColorType read Blue write Blue;
end;

constructor TMyRecord.Create(val: Integer);
begin
  Red := val;
end;

procedure TMyRecord.printRed;
begin
  writeln('Red: ', Red);
end;
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz