Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unterschied in Klassenaufbau? (https://www.delphipraxis.net/79636-unterschied-klassenaufbau.html)

Gentleman 25. Okt 2006 18:40


Unterschied in Klassenaufbau?
 
Guten Abend!

Ich habe mir eine Klasse bisher folgendermaßen erstellt:
Delphi-Quellcode:
TTest = class(TObject)
  Port: Integer;
  Max: Integer;
end;
Somit konnte ich auf aVar und aVar2 zugreifen und sie verändern. Nun bin ich aber auf folgendes gestoßen:
Delphi-Quellcode:
TTest = class(TObject)
private
  FPort: Integer;
  Fmax: Integer;
public
  property Port: Integer read FPort write FPort;
  property Max: Integer read FMax write FMax;
end;
Das ganze sieht zwar etwas professioneller aus, doch habe ich bisher noch keinen Unterscheid in der Verwendung feststellen können. Deswegen meine Frage: Wo genau liegt der Untescheid in der Verwendung?


Wäre sehr dankbar für etwas Hilfe. :)

Vielen Dank,
Lennard

oki 25. Okt 2006 18:49

Re: Unterschied in Klassenaufbau?
 
Hi,

wie du sagst, erst mal keiner. Der Unterschied kommt erst, wenn du etwas mehr machst.
Ein Beispiel ist das hier:
Delphi-Quellcode:
TTest = class(TObject)
private
  FPort: Integer;
  Fmax: Integer;
public
  property Port: Integer read FPort;
  property Max: Integer read FMax;
end;
eine öffentliche Klasseneigenschaft, die man nur lesen kann.
Oder so:
Delphi-Quellcode:
TTest = class(TObject)
private
  FPort: Integer;
  Fmax: Integer;
  procedure SetPort(Value : Integer);
public
  property Port: Integer read FPort write SetPort;
  property Max: Integer read FMax;
end;

.....

procedure TTest.SetPort(Value : Integer);
begin
  IF Value < 1 then FPort := 1 else FPort := Value;
end;
Und dann ist es noch ein guter Stil.

Gruß oki

mkinzler 25. Okt 2006 18:51

Re: Unterschied in Klassenaufbau?
 
Bei deinem Beispiel sieht man den Unterschied nicht direkt, wenn man aber eine kleine Erweiterung durchfüht schon:

Delphi-Quellcode:
TTest = class(TObject)
private
  FPort: Integer;
  Fmax: Integer;
public
  procedure setPort( Value: Integer);
published
  property Port: Integer read FPort write setPort;
  property Max: Integer read FMax write FMax;
end;

procedure TTest.setPort( Value: Integer);
begin
    if Value > 0 then FPort := Value;
end;

Gentleman 25. Okt 2006 18:56

Re: Unterschied in Klassenaufbau?
 
Ach so, nun ist mir die Sache klar geworden. :wink: Danke für die schnelle Hilfe!!

Lennard

xZise 25. Okt 2006 20:42

Re: Unterschied in Klassenaufbau?
 
An sich gehört es zum guten Stil nie direkt auf Varibeln zuzugreifen.

In Delphi wird das meißtens über "propertys" gelöst.

Allerdings kann man es auch anders machen (so wird es in Java z.B. umgesetzt...):
Delphi-Quellcode:
private
  myVar : Integer;
  myBool : Boolean;
public
  procedure setMyVar(Value : Integer);
  function getMyVar : Integer;
 
  procedure setMyBool(Value : Boolean);
  // Diese Schreibweise ist mir nur aus Java bekannt und auch nur für Booleans
  function isMyBool : Boolean;
end;

Bernhard Geyer 25. Okt 2006 21:38

Re: Unterschied in Klassenaufbau?
 
Für Integer welche jeden Wert annehmen können mag der Property überzogen sein, aber sobald es um Member-Klassen ober Bereichstypen oder Eigenschaften geht welche andere Aktionen erfordern brauchst Du Properties mit Get/Set-Methoden.

Ach ja: Und ohne Published-Properties wäres mit der graphischen Konfiguration von Formularen auch nicht sehr weit her.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 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