![]() |
AW: Frage zu Propertys
Welchen Unterschied macht es für den Benutzer einer Klasse, ob eine Property so deklariert ist
Delphi-Quellcode:
oder so
property SomeProp: integer read FSomeProp write FSomeProp;
Delphi-Quellcode:
?
property SomeProp: integer read GetSomeProp write SetSomeProp;
|
AW: Frage zu Propertys
Zitat:
|
AW: Frage zu Propertys
Zitat:
Zitat:
|
AW: Frage zu Propertys
Zitat:
-Der Konsument der Klasse sieht nicht, ob es sich um einen direkten Zugriff auf die Variable handelt oder ein Getter/Setter involviert ist. -Der Typ der Internen Varibel kann unabhängig vom Typ der Property geändert werden ( u.U. muss man dann Getter/Setter implemnetieren) -Man kann nachträglich Getter/Setter einführen ohne das der Konsument etwas davon merkt- Zitat:
Zwingend Setter/getter zu verwenden und nur bei Java so, weil es dort keine Properties gibt! In C# wurde im Großen-und-Ganzen das Verhalten von Delphi übernommen ( sogar vereinfacht, da inline) |
AW: Frage zu Propertys
Zitat:
Nach der Argumentation könnte man doch theoretisch auch fragen wofür man überhaupt Klassen und Klassenmethoden verwendet, anstatt diese "einfach" prozedural ohne Klasse runterzutippen und globale Variablen zu verwenden. Das geht mit Sicherheit auch schneller (geringerer Aufwand) und ist vielleicht beim Zugriff auch schneller ohne die Klassenzuordnung ;-) (wobei ich mir bei den Methodenaufrufen performancetechnisch keine Gedanken mache, außer vielleicht ich entwickle für eine wirklich schwache Platform (TV embedded oder ähnliches)). Und was C# angeht: Soweit ich mich erinnere kann ich da auch nicht direkt auf eine Variable verweisen, sondern habe lediglich die Möglichkeit, Getter und Setter in "verkürzter" Form zu implementieren - muss aber trotzdem einen Wert rausgeben (Result := FBla) und einen Wert verarbeiten (FBla := AValue), was dann wiederum einer Kapselung in eine Methode entspricht. |
AW: Frage zu Propertys
Zitat:
In C# sieht das so aus:
Code:
private int var; // Variablendefinition
public int Var // Property-Definition { get{ return var; } // Getter set{ var = value; } // Setter } |
AW: Frage zu Propertys
Zitat:
Zitat:
Zitat:
Zitat:
Code:
Nennt sich Autoproperty und ist einfach die Konsequenz aus dem, was Du ablehnst.
public int Var {get;set;}
|
AW: Frage zu Propertys
Zitat:
Zitat:
Zitat:
Wenn ich eine Property
Delphi-Quellcode:
verwende, dann verwende ich kein Interface für den Zugriff darauf. Wenn ich kein Interface verwende, habe ich keinen definierten Zugriff auf eine Klasse und kann diese in Delphi entsprechend nicht so einfach für den Test mocken. (außer ich mache es Quick and Dirty und erstelle mir im Testprojekt eine Kopie der Unit und implementiere dort meinen Stubcode). Und das ist eben der Grund warum ich den "überflüssigen" Code bevorzuge.
property SomeProp: integer read FSomeProp write FSomeProp;
|
AW: Frage zu Propertys
Zitat:
Delphi-Quellcode:
Aber der wahre Unterschied sieht man im Erzeugten Laufzeitcode
type
TPerson = class private FVorname, FNachname: string; published property Vorname: string read FVorname write FVorname; end; TPerson2 = class private FVorname, FNachname: string; public proedure setVorname( AValue: string); published property Vorname: string read FVorname write setVorname; end; ... var p1: TPerson; p2: TPerson2; ... //Kein Unterschied bei der Verwendung, nur mehr Code p1.Vorname := 'Franz'; p2.Vorname := 'Otto';
Delphi-Quellcode:
wird zu
p1.Vorname := 'Franz';
Delphi-Quellcode:
p1.FVorname := 'Franz';
Delphi-Quellcode:
wird zu
p2.Vorname := 'Otto';
Delphi-Quellcode:
->
p2.setVorname( 'Otto');
Delphi-Quellcode:
Im Endeffekt wird das selber gemacht nur hat man anstatt einer normalen Wertzuweisung noch einen Methodenaufruf dazwischen.
p2.FVorname := 'Otto';
Und dieser ist imho überflüssig. Interfaces sind sinnvoll aber nicht immer und für Alles. |
AW: Frage zu Propertys
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 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 by Thomas Breitkreuz