AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Class Var vs Var

Ein Thema von Perlsau · begonnen am 19. Mai 2014 · letzter Beitrag vom 19. Mai 2014
Antwort Antwort
Seite 1 von 2  1 2      
Perlsau
(Gast)

n/a Beiträge
 
#1

Class Var vs Var

  Alt 19. Mai 2014, 01:24
Delphi-Version: 2009
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:
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;
Dazu hab ich mehrere Fragen:

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 ...
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Class Var vs Var

  Alt 19. Mai 2014, 02:17
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: Class Var vs Var

  Alt 19. Mai 2014, 02:30
Class vars sind nix anderes als globale Variablen mit nem zusätzlichen Scope - daher:
Ähh ... was bedeutet Scope?

1. Ja - das sie ja an die Klasse gebunden sind und nicht an die Instanz
Das ist erfreulich
2. Nein, solange keine Methoden oder Sichtbarkeitsmodifizierer kommen sind alle nachfolgenden class vars.
Auch das erleichtert die Arbeit sehr
3. Ich persönlich verwende für Felder nur private oder protected, daher Getter und Setter für Zugriff von außen.
Okay, dann sieht das in Zukunft so bei mir aus:
Delphi-Quellcode:
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;

...
Die Properties, die auf Klassenvariablen zugreifen, muß man vermutlich nicht besonders kennzeichnen, oder?
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Class Var vs Var

  Alt 19. Mai 2014, 02:34
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:

class property Fehlermeldung : String read fFehlerMeldung write fFehlerMeldung;

Geändert von Bjoerk (19. Mai 2014 um 02:41 Uhr) Grund: Edit:
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: Class Var vs Var

  Alt 19. Mai 2014, 02:39
Du meinst, ich muß auch die jeweiligen Getter- und Setter-Methoden, die auf Klassenvariablen zugreifen, und die jeweiligen Properties als Klassenmethoden bzw. Klassenproperties deklarieren?
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Class Var vs Var

  Alt 19. Mai 2014, 02:42
Ja. Manchmal will der Compiler auch ein ; static; dahinter.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Class Var vs Var

  Alt 19. Mai 2014, 07:42
@Stevie & @Bjoerk:
Besten Dank für eure wertvollen Auskünfte
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Class Var vs Var

  Alt 19. Mai 2014, 07:44
Ja. Manchmal will der Compiler auch ein ; static; dahinter.
AFAIK will der bei class property das immer als static haben (bei mir wenigstens)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

AW: Class Var vs Var

  Alt 19. Mai 2014, 08:04
Ähh ... was bedeutet Scope?
Scope

P.S. Meine Predigt, warum globale Variablen schlecht sind, spar ich mir heute mal
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: Class Var vs Var

  Alt 19. Mai 2014, 08:19
Merci, da hätt ich auch selber draufkommen können, bei Widipedia zu suchen

P.S. Meine Predigt, warum globale Variablen schlecht sind, spar ich mir heute mal
Du meinst, globale Variablen wären in jedem Fall und unter allen Umständen "schlecht" und in allen Fällen grundsätzlich vermeidbar? Wenn ja, wozu gibt's die dann überhaupt? Im großen & ganzen stimme ich den zahlreichen Plädoyers gegen den Einsatz globaler Variablen durchaus zu, aber doch nicht grundsätzlich
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 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