![]() |
Delphi-Version: 2009
Class Var vs Var
Gesetzt den Fall, ich benötige einige Variablen global im ganzen Programm und richte mir dafür eine Klasse ein, die von allen anderen Units, die diese Variablen benötigen, verwendet wird. Wenn ich nun z.B. unter Public eine Variable namens AppendModus : Boolean; deklariere, hat doch jede Unit, die eine Instanz dieser Klasse erzeugt, auch eine andere Instanz dieser Variablen. Nun habe ich kürzlich irgendwo in den Weiten des Forums gelesen, daß man zu diesem Zweck Klassenvariablen deklariert:
Delphi-Quellcode:
Dazu hab ich mehrere Fragen:
TYPE
TGlobalix = CLASS PRIVATE { Private-Deklarationen } PUBLIC { Public-Deklarationen } Class Var FehlerMeldung, DB_Pfad, Pfad_Main, Modustext : String; Class Var StartModus, AppendModus, EditModus : Boolean; END; 1. Verfügt jede Instanz dieser Klasse über dieselben Werte der in Class Var deklarierten Variablen? 2. Muß ich vor jeder Deklaration Class Var schreiben oder sind alle Variablen, die ich nach der Anweisung Class Var hinschreibe, Klassenvariablen? 3. Sollte man hier besser mit Properties arbeiten und dann nur über die Setter- und Getter-Methoden setzen und abfragen? Ich habe bereits damit experimentiert und z.B. den AppendModus von FormMain aus auf True gesetzt, dann vom Datenmodul aus abgefragt und das korrekte Resultat erhalten. Bin mir allerdings nicht sicher, ob man sich darauf verlassen kann ... |
AW: Class Var vs Var
Class vars sind nix anderes als globale Variablen mit nem zusätzlichen Scope - daher:
1. Ja - das sie ja an die Klasse gebunden sind und nicht an die Instanz 2. Nein, solange keine Methoden oder Sichtbarkeitsmodifizierer kommen sind alle nachfolgenden class vars. 3. Ich persönlich verwende für Felder nur private oder protected, daher Getter und Setter für Zugriff von außen. |
AW: Class Var vs Var
Zitat:
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
Die Properties, die auf Klassenvariablen zugreifen, muß man vermutlich nicht besonders kennzeichnen, oder?
TYPE
TGlobalix = CLASS PRIVATE { Private-Deklarationen } Class Var fFehlerMeldung, fDB_Pfad, fPfad_Main, fModustext : String; fStartModus, fAppendModus, fEditModus : Boolean; Function GetfFehlerMeldung : String; Procedure SetfFehlerMeldung(Const Value : String); PUBLIC { Public-Deklarationen } Property Fehlermeldung : String read GetfFehlerMeldung write SetfFehlerMeldung; ... END; IMPLEMENTATION {TGlobalix} Function TGlobalix.GetfFehlermeldung : String; begin Result := fFehlermeldung; end; Procedure TGlobalix.SetfFehlerMeldung(Const Value : String); begin fFehlerMeldung := Value; end; ... |
AW: Class Var vs Var
Du kannst auch auf eine Instanz ganz verzichten und einfach TGlobalix.AppendModus verwenden. Dasselbe auch für Methoden (class procedures, class functions). Properties ja (hier class property).
Edit: Sehe gerade deinen Code. Wie gesagt hier class property und die Getter als class function und die Setter als class procedure oder auch so:
Delphi-Quellcode:
class property Fehlermeldung : String read fFehlerMeldung write fFehlerMeldung;
|
AW: Class Var vs Var
Du meinst, ich muß auch die jeweiligen Getter- und Setter-Methoden, die auf Klassenvariablen zugreifen, und die jeweiligen Properties als Klassenmethoden bzw. Klassenproperties deklarieren?
|
AW: Class Var vs Var
Ja. Manchmal will der Compiler auch ein ; static; dahinter.
|
AW: Class Var vs Var
@Stevie & @Bjoerk:
Besten Dank für eure wertvollen Auskünfte :thumb: |
AW: Class Var vs Var
Zitat:
Delphi-Quellcode:
das immer als
class property
Delphi-Quellcode:
haben (bei mir wenigstens) :)
static
|
AW: Class Var vs Var
Zitat:
![]() P.S. Meine Predigt, warum globale Variablen schlecht sind, spar ich mir heute mal ;) |
AW: Class Var vs Var
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 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