AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

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
Online

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

gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 09: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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: gibt es Class Procedures in Records?

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

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

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 09: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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 10: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
Online

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

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 10: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 ;(
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 10: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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 10: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
Online

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

Re: gibt es Class Procedures in Records?

  Alt 27. Jan 2009, 10: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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 16: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