![]() |
Re: Frage zu Properties
Zitat:
Delphi-Quellcode:
irgendwelche potentiellen Probleme vermeiden, die ich hätte, wenn ich statt dessen gleich eine Variable xyz definieren würde.
property xyz ... read Fxyz write Fxyz
Ich habe ja schon im oberen Posting geschrieben Zitat:
Wenn ich später draufkomme, dass ich doch eine Getter oder Setter Methode verwenden will, kann ich das doch immer noch ändern, und für ein Programm, das diese Unit verwendet, egal ob als Quelltext oder als DCU, ändert sich doch eigentlich gar nichts, wenn ich zu einem späteren Zeitpunkt eine Variablen in eine Property mit Getter und/oder Setter Methode umbaue. |
Re: Frage zu Properties
Es geht hier um die nachträgliche Möglichkeit einen Getter/Setter einzuführen.
In diesem Fall ist das dann einfacher. Oder wie schon erwähnt beim Ändern des Types ( Getter sorgt dann das "alte" Property ihren Typ nicht ändern muss. Es ist nun mal ein Konzept von OOP Implementierungsdetail zu verdecen ( Abstraktion, black Box) |
Re: Frage zu Properties
Hallo,
Zitat:
Delphi-Quellcode:
Ändere ich also später eine Variable in ein Property, kann es ein,
procedure GetData(var theValue: Integer);
begin theValue:= 1; end; type TClass1 = class i: Integer end; type TClass2 = class private Fi: Integer; public property i: Integer read Fi write Fi; end; var Class1: TClass1; Class2: TClass2; begin Class1:= TClass1; GetData(Class1.i); // das geht Class2:= TClass1; GetData(Class2.i); // das geht nicht dass bestimmter Code nicht mehr läuft. Und das ist kein theoretischer Fall, habe ich auch öfter (in altem Code von mir) ... ;) Heiko |
Re: Frage zu Properties
Zitat:
Delphi-Quellcode:
aber das:
type
TTest1 = class strict private FRect: TRect; public property Rect: TRect read FRect write FRect; end;
Delphi-Quellcode:
nehmen muss, damit ich auf einzelne Felder von "Rect" zugreifen kann:
type
TTest2 = class public Rect: TRect; end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var t1: TTest1; t2: TTest2; begin t2.Rect.Top := 0; // Geht t1.Rect.Top := 0; // geht nicht end; |
Re: Frage zu Properties
Zitat:
* Du kannst die Adresse der Variablen nicht ermitteln (zu mindestens nicht ohne das Layout der Klasse zu kennen). * Du kannst ein Property nicht als Var-Parameter über geben. Der Vorteil: Du handelst nach weit verbreiteten Delphi-Konventionen. * Alle internen Felder ein Klasse beginnen mit "F". * Alle internen Felder haben die Sichtbarkeit "private". * Wenn du dein Property doch mit Getter und Setter versiehst, muss du keine Code ändern der deine Klasse verwendet, da niemand mit der Adresse des Feldes arbeiten kann und und niemand dieses Feld als Var-Parameter übergeben kann. Auf das verletzen von Konventionen steht keine Todesstrafe (auch wenn manche so tun). Du solltest dir aber über legen ob das verletzen der Konvention dir hier irgendeinen Vorteil bringt. |
Re: Frage zu Properties
Zitat:
|
Re: Frage zu Properties
Hallo,
Todesstrafe nicht, aber ein bissel mit dem Messer kitzeln, ist erlaubt ... ;) Heiko |
Re: Frage zu Properties
Hi zusammen,
Zitat:
VG Pixfreak |
Re: Frage zu Properties
Zitat:
Delphi-Quellcode:
welche dann auch so benutzt wird:
public
MyVar: Integer;
Delphi-Quellcode:
Wenn du das ganze jetzt im Nachhinein mit Getter/Setter handeln willst:
MyVar:= 3;
Delphi-Quellcode:
Der Zugriff bleibt überall der selbe und du musst nicht jeden noch ersetzen.
private
FMyVar: Integer; public property MyVar: Integer read FMyVar write SetMyVar; |
Re: Frage zu Properties
@ tofacetekilla
ja, geanu so habe ich es gemeint. Zitat:
Darüber, dass man auf die einzelnen Felder einer Record oder Klassenproperty nicht direkt zugreifen kann, bin ich bisher auch noch nicht gestolpert, und es ist auf jeden Fall gut, diesen Umstand im Hinterkopf zu behalten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 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