AGB  ·  Datenschutz  ·  Impressum  







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

gibt es Class Procedures in Records?

Ein Thema von himitsu · begonnen am 27. Jan 2009 · letzter Beitrag vom 27. Jan 2009
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 10:45
ja ja, ich schonwieder

Gibt es irgendeates ähnliches wie die KlassenProzeduren auch für Records?

etwa so:
Delphi-Quellcode:
TMyRecord = packed Record
  Obj: TMyObject;
  Class Function Create: TMyRecord;
End;

Class Function TMyRecord.Create: TMyRecord;
  Begin
    Result.Obj := TMyObject.Create;
  End;
Es soll eine Function entstechen, welche wie der Konstructer bei Klassen aussieht
und intern einen Record erstellt.

Hab hier ein Objekt (unterschiedliche Objecte) in einem Record "versteckt" und wollte dafür auch einige Create-Funktionen direct in dem Record anlegen.

Aktuell geht es zwar auch ohne sowas, aber es wäre schon hübscher, wenn es ginge


im Prinzip soetwas wie z.B. bei Implicit/Explicit, nur ohne übergebene Parameter:
Code:
TMyRecord = [color=#0000af][b]packed Record[/b][/color]
  [color=#0000af][b]Class Operator[/b][/color] Implicit[color=#808080](x: irgendwas)[/color]: TMyRecord ;
  [color=#0000af][b]Class Operator[/b][/color] Explicit[color=#808080](x: irgendwas)[/color]: TMyRecord ;


in Liebe dat himilein , oder so
$2B or not $2B
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 10:47
In neueren Delphi Version ( m.W. ab D2006) ja.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 10:57
In D2009 wird bei Class (vor Functionen ... siehe erster Code) gemeckert

Zitat:
[DCC Fehler] OperatorInterface.pas(131): E2398 Klassenmethoden in Record-Typen müssen statisch sein
etwas ab D2006/TurboDelphi hätt schon vollkommen gereicht


[add]
das mit dem Free funktioniert natürlich (ist schließlich auch nix Außergewöhnliches),
aber etwas für Create konnt ich nicht finden
Delphi-Quellcode:
Type TMyRecord = Record
    Obj: TObject;
    Function Create: TMyRecord;
    Procedure Free;
  End;

Function TMyRecord.Create: TMyRecord;
  Begin
    Result.Obj := TObject.Create;
  End;

Procedure TMyRecord.Free;
  Begin
    Obj.Free;
    Obj := nil;
  End;

Procedure TForm1.FormCreate(Sender: TObject);
  Var R: TMyRecord;

  Begin
    R := TMyRecord.Create;

    R.Free;
  End;
dank der Operatoren geht sowas zumindestens, aber es wäre natürlich etwas Tolles, wenn es auch über den TMyRecord ginge
Delphi-Quellcode:
Procedure TForm1.FormCreate(Sender: TObject);
  Var R: TMyRecord;

  Begin
    R := TObject.Create;

    R.Free;
  End;
schon schlim, dieser Perfektionist in mir
$2B or not $2B
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 11:05
Delphi-Quellcode:
  TMyRecord = packed Record
    Obj: TMyObject;
    Class Function Create: TMyRecord; static;
  End;
sollte funktionieren.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 11:07
ich probierst mal

[info] hatte oben noch was nacheditiert

Delphi-Quellcode:
Type TMyRecord = Record
    Obj: TObject;
    Function Create: TMyRecord; Static; <<<<<<
    Procedure Free;
  End;
Zitat:
[DCC Fehler] Unit1.pas(26): E2376 STATIC kann nur für nicht-virtuelle Klassenmethoden verwendet werden
neee, geht nicht ;(
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 11:15
hab die OH mal nach "static" durchsucht....
Zitat von OH: static:
Syntax
static <datendefinition> ;
static <funktionsname> <funktionsdefinition> ;
Delphi-Quellcode:
Type TMyRecord = Record
    Obj: TObject;
    Static Function Create: TMyRecord;
    Procedure Free;
  End;
Static ist hier 'nen Syntaxfehler
$2B or not $2B
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 11:17
Kompilliert zumindes mal:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TMyObject = class
  end;

  PMyRecord = ^TMyRecord;
  TMyRecord = packed Record
    Obj: TMyObject;
    Class Function Create: PMyRecord; static;
  End;

var
  Form1: TForm1;
  Test: PMyRecord;

implementation

{$R *.dfm}

class function TMyRecord.Create: PMyRecord;
var
    p: PMyRecord;
begin
    New(p);
    result := p;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    Test := TMyRecord.Create;
end;

end.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 11:19
ja hab's grad mitbekommen ... es geht

hatte vorhin beim Test das Class vergessen
Class Function Create: TMyRecord; Static;
ich glaub ich verlieb mich langsam in diese neuen Record-Funktionalitäten

[add]
ach ja ....
Danke
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:41 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