Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Klassen - Deklarationsreihenfolge (https://www.delphipraxis.net/33471-klassen-deklarationsreihenfolge.html)

glkgereon 7. Nov 2004 18:55


Klassen - Deklarationsreihenfolge
 
ja, also in welcher reihenfolge muss/kann ich die sachen alle deklarieren?

also ich hatte die grundstruktur so überlegt:

Delphi-Quellcode:
type
  TRechner = class(TObject)
    public   //Für Alle Sichtbar
    //Konstruktor / Destruktor
      function Create:TRechner;
      procedure Free;

    //Wert setzen / auslesen
      procedure SetValue(Value:Double);
      function GetValue:Double;

    protected //Nur in Unit und Abgeleiteten Klassen Sichtbar

    private  //Nur in abgeleiteten Klassen sichtbar
    //Konstruktor / Destruktor
      constructor CreateMe;
      destructor FreeMe;
    //Werte / Variablen
      DoubleValue :Double; //Double-Wert
  end;//of TRechner
aber nun motzt er was von wegen ich dürfte keine variablen (oder felder) NACH methoden deklarieren

kann ich das umgehen?



und nochwas(ich weiss, neue frage neuer thread, trotzdem):

Delphi-Quellcode:
      DoubleValue :Double; //Double-Wert

implementation

procedure TRechner.SetValue(Value:Double);
begin
  DoubleValue:=Value;
end;

function TRechner.GetValue:Double;
begin
  Result:=DoubleValue;
end;
kann ich die konstruktion mit dem setvalue und getvalue durch so eine read/write konstruktion ersetzen?

bttb930 7. Nov 2004 19:01

Re: Klassen - Deklarationsreihenfolge
 
Machs so

Delphi-Quellcode:
type
  TRechner = class(TObject)
  private
    FDoubleValue: Double;
  public
    constructor Create;
    property DoubleValue: Double read FDoubleValue write FDoubleValue;
  end;
Den ganzen anderen Kram brauchst Du nicht. Der Konstruktor ist i.d.R. Public, es sei denn aus irgendeinem Grund soll er nur innerhalb der Unit aufrufbar sein. Free brauchst Du nicht, überschreibt man auch nicht. IdR überschreibt man den destrucotr Destroy, aber nur wenn man was frei zu geben hat - hast Du aber nicht. Die SetValue und GetValue-Funktionen kannst Du mit dem obigen property-Befehl sparen.

mirage228 7. Nov 2004 19:03

Re: Klassen - Deklarationsreihenfolge
 
Hi,

ich verwende folgende Reihenfolge: private, protected, public, published

Delphi-Quellcode:
type
  TRechner = class(TObject)
  private
     DoubleValue :Double; //Double-Wert
     //Wert setzen / auslesen
     procedure SetValue(Value:Double);
     function GetValue: Double;
  public
    property DeinDoubleWert: Double read GetValue write SetValue;
    // oder:
    // property DeinDoubleWert: Double read DoubleValue write DoubleValue;
    constructor Create; // keine Function!
    destructor Destory; override; // keine Prozedur!
  end;
So würd ich das machen :)
(Das löst auch Dein zweites Problem ;) )

mfG
mirage228

bttb930 7. Nov 2004 19:06

Re: Klassen - Deklarationsreihenfolge
 
noch was:

deine kommentare zu private/protected/public sind fehlerhaft:

ALLES (Auch als private deklariert) ist in der Unit sichtbar.

Der Unterschied zwischen Protected und Private ist idR der, dass man als Protected deklarierte Methoden in abgeleiteten Klassen überschreiben möchte, während als Private deklarierte Methoden nicht überschreibbar sind.

glkgereon 7. Nov 2004 19:14

Re: Klassen - Deklarationsreihenfolge
 
hm...

also um problem 1 zu lösen soll ich einfach den public und den private-block vertauschen...
ok

dann danke für das read/write-statement

Zitat:

Der Konstruktor ist i.d.R. Public
also ich soll den public machen...

nur das mit dem destruktor/free habbich noch nicht so ganz gecheckt...

Zitat:

Free brauchst Du nicht, überschreibt man auch nicht. IdR überschreibt man den destrucotr Destroy, aber nur wenn man was frei zu geben hat - hast Du aber nicht
also das ist ja wie ich schon sagte nur der "rumpf"...also da werden noch massig sachen zukommen, wahrscheinlich auch sachen die "createn" muss...

und free, destroy, is das nicht dasselbe?
also ich benutz immer free zum freigeben...

mirage228 7. Nov 2004 19:16

Re: Klassen - Deklarationsreihenfolge
 
Zitat:

Zitat von glkgereon
und free, destroy, is das nicht dasselbe?
also ich benutz immer free zum freigeben...

Hi,

Free ruft intern Destroy auf. Dabei wird aber noch überprüft ob Self <> nil, bevor aufgerufen wird.
Als Selbst-Klassen-Ersteller solltest Du schön Destroy überschreiben und am Ende Deines Destroys mit inherited den geerbten Konstruktor aufrufen. :)

mfG
mirage228

glkgereon 7. Nov 2004 19:21

Re: Klassen - Deklarationsreihenfolge
 
naja, da ich von TObect erbe kann ich mir das inherited destroy; ja sparen, oder?

THX, ich habs verstanden...

eine frage noch:

wann ich, wenn ich nur ne unit mit ner typendeklaration drin hab die syntax überprüfen lassen,bzw halt die normale überprüfung?

mirage228 7. Nov 2004 19:26

Re: Klassen - Deklarationsreihenfolge
 
Zitat:

Zitat von glkgereon
naja, da ich von TObect erbe kann ich mir das inherited destroy; ja sparen, oder?

THX, ich habs verstanden...

Hi,

Ja, im Prinzip schon, aber wenn Du mal vorhaben solltest das TObject durch etwas anderes zu ersetzen, brauchst Du das inherited nicht mehr zu ergänzen. :)
Ich würde es einfach "Aus Gewohnheit" hinmachen.

mfG
mirage228

glkgereon 7. Nov 2004 22:03

Re: Klassen - Deklarationsreihenfolge
 
jup....


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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-2025 by Thomas Breitkreuz