AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Methoden nun doch für Records?

Ein Thema von efknarf · begonnen am 9. Nov 2007 · letzter Beitrag vom 10. Nov 2007
Antwort Antwort
Seite 1 von 3  1 23      
efknarf

Registriert seit: 12. Jan 2007
Ort: Erfurt
21 Beiträge
 
Delphi 2007 Professional
 
#1

Methoden nun doch für Records?

  Alt 9. Nov 2007, 01:44
Hallo, ihr fleißigen User,

folgenden Record habe ich deklariert:

Delphi-Quellcode:
type
  TTest = Record
  private
    Feld1: Integer;
    Feld2: Integer;
  public
    Feld3: Integer;
    procedure Clear;
  end;

implementation

procedure TTest.Clear
begin
  Feld1:=0;
  Feld2:=0;
  Feld3:=0;
end;
Nun kann man diesen TTest-Record wie einen gewöhnlichen Record verwenden, wobei sich die Felder so verhalten, wie man es von ihnen erwartet.
Weiß nicht, ob das nun bei jedem hier funktioniert. Bei mir funktionierte es jedenfalls. Ist das nun eine Methode eines Records oder wie nennt man das nun und ist diese Methode identisch mit einer Object-Methode? In der Hilfe zu Delphi und auch hier habe ich nichts dazu gefunden.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Methoden nun doch für Records?

  Alt 9. Nov 2007, 05:33
Eigentlich wird (ab D10) nur Klassenoperatoren unterstützt.
Welche Delphiversion? .Net?
Markus Kinzler
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#3

Re: Methoden nun doch für Records?

  Alt 9. Nov 2007, 05:35
Hallo,
ich weiss nicht was du für eine Delphi Version hast, aber bei mir geht das weder mit D7 noch mit D2005.
Ausserdem widerspricht das ganz klar der Object Pascal Grammatik.

Delphi-Quellcode:
type
  TTest = Record
// private
    Feld1: Integer;
    Feld2: Integer;
// public
    Feld3: Integer;
// procedure Clear;
  end;
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//procedure TTest.Clear
//begin
// Feld1:=0;
// Feld2:=0;
// Feld3:=0;
//end;
All die auskommentierten Zeilen sind fehlerhaft! Wobei das bei der Procedure im implementation Teil klar ist.
Ihr fehlt ja die Deklaration!

Grüsse
Rainer
  Mit Zitat antworten Zitat
efknarf

Registriert seit: 12. Jan 2007
Ort: Erfurt
21 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Methoden nun doch für Records?

  Alt 9. Nov 2007, 05:50
Guten Morgen,

Ja! Das hatte ich fast erwartet. Meine Delphi-Version ist von CodeGear - Delphi 2007. Liegt wohl an der Version, denn in einer älteren Version funktionierte diese Art der Deklaration nicht.
Trotz dieser Neuerung ist selbst nach intensiver Suche in der Delphi-Hilfe nichts darüber zu finden. Bin auch mehr oder weniger nur zufällig darüber gestolpert.

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Methoden nun doch für Records?

  Alt 9. Nov 2007, 05:52
Sorry, aber ich konnte das soeben unter Delphi2007Professional nachstellen!!!
Bis auf ein fehlendes ";". Es lässt sich so komplilieren!.
Faszinierend!! Aber klar ist doch hoffentlich, daß man davon tunlichst die Finger lassen sollte!!!
Peter Schaible
  Mit Zitat antworten Zitat
efknarf

Registriert seit: 12. Jan 2007
Ort: Erfurt
21 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Methoden nun doch für Records?

  Alt 9. Nov 2007, 06:07
Zitat:
Faszinierend!! Aber klar ist doch hoffentlich, daß man davon tunlichst die Finger lassen sollte!!!
Wahrscheinlich hast du damit sogar recht, aber es ist doch toll zu wissen, was machbar ist, denn es vereinfacht vieles. Aber ein wenig seltsam ist das schon, daß man einem Record "Methoden" zuordnen kann.

Gruß

Frank
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#7

Re: Methoden nun doch für Records?

  Alt 9. Nov 2007, 06:25
Hallo,

ich sehe überhaupt keinen Grund ein solches Konstrukt einzusetzen.
Was soll das Ganze denn vereinfachen?
Mal ganz davon abgesehen, dass du nie genau weisst was passiert.
(Es sei denn du analysierst das Teil auf Assembler Ebene. Viel Spass dabei.)

Grüsse
Rainer
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Methoden nun doch für Records?

  Alt 9. Nov 2007, 06:28
Zitat von efknarf:
Wahrscheinlich hast du damit sogar recht, aber es ist doch toll zu wissen, was machbar ist, denn es vereinfacht vieles. Aber ein wenig seltsam ist das schon, daß man einem Record "Methoden" zuordnen kann.
Da man dieses Feature AFAIK unter .NET 2.0 zwingend benötigte hat man es auch gleich für Win32 verfügbar gemacht.
Und was soll seltsam sein? Alle Features von einem richtigen Objekt sind trotzdem nicht möglich. Schon mal versucht von diesem Record eine ableitung zu machen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: Methoden nun doch für Records?

  Alt 9. Nov 2007, 07:22
Das kompiliert auch unter BDS2006.

Zitat von WS1976:
ich sehe überhaupt keinen Grund ein solches Konstrukt einzusetzen.
Leichtgewichtige 'Klassen' und statische 'Objekte', siehe B.Geyer's Anmerkungen.
Zitat von WS1976:
Was soll das Ganze denn vereinfachen?
Gute Frage. Die haben das vermutlich für Delphi.NET implementieren müssen und dann gleich für Delphi.Win32 verfügbar gemacht.
Zitat von WS1976:
Mal ganz davon abgesehen, dass du nie genau weisst was passiert.
Wieso? Es ist doch ganz klar, was passiert.

Schau mal in der Hilfe unter 'Records (erweiterte)'.


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

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Methoden nun doch für Records?

  Alt 9. Nov 2007, 07:53
Hallo,

hier ist ein mögliches Einsatzgebiet für Records mit Methoden: Enumerator Records.
Der Artikel zeigt auch, daß Records deutlich weniger Verwaltung erfordern - so wie es alzaimar bereits angesprochen hat.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:26 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