Announcement

Collapse
No announcement yet.

Statische Feld-Variablen einer Klasse

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Statische Feld-Variablen einer Klasse

    Unter C++ kenne ich die Deklaration einer Klassen-Vaiable als statisch. Der rieseige Vorteil diese Deklaration ist, daß diese Variable, einmal initialisiert, für alle Nachfahren dieser Klasse nur ein einziges mal existiert. Will man also eine, sozusagen globale aber nur für die Instanzen dieser Klasse sichtbare Variable ändern, ist das über diese statische Variable möglich.

    Ich habe diese Funktionalität unter Object-Pascal nicht finden können. Ich löse das Problem über die Deklaration einer weiteren Klasse, die alle allgemeinen Parameter enthält, erstelle Sie einmal und übergebe Sie an sämtliche Nachfahren der Basis-Klasse. Leider ist das, abgesehen vom erhöhten Programmieraufwand, bei weitem nicht so elegant und einfach wie die Verwendung einer statischen Klassenvariable unter C++.

    Falls es doch eine Möglichkeit gibt, wäre ich für einen Tip dankbar.

    T. Frost

  • #2
    Hi

    <pre>

    type
    TMyObject = class
    private
    function GetStatic: String;
    procedure SetStatic(value: String);
    public
    property StaticString: String read GetStatic write SetStatic;
    end;

    implementation

    const
    FStatic: String = 'Test-Static';

    function TMyObject.GetStatic: String;
    begin
    Result := FStatic;
    end;

    procedure TMyObject.SetStatic(value: String);
    begin
    FStatic := Value;
    end;

    end.

    </pre>

    Gruß Hage

    Comment


    • #3
      Schönen Dank für die Antwort !

      Ich kann leider aber nicht aus diesen Codezeilen ersehen, inwiefern die statische Variable in der Klasse TMyObject gekapselt ist. Beziehungsweise, ist mir das Konstruct FStatic nicht bekannt und weder in der Onlinehilfe oder meiner Literatur zu Object-Pascal zu zu finden.

      Für weiter Hinweise Dank im Vorraus.

      T. Fros

      Comment


      • #4
        Hi

        Hm, Du bist Anfänger !? FStatic ist einfach der NAME einer zur Unit gobalen Variable, dies ist zusätzlich noch vorinitialisiert.
        Willst Du in eine Klassse ein "virtuelles" Member integrieren das zu allen Objectinstanzen einer solchen Klasse unique ist MUSS die Variable ja GLOBAL zu ALLEN objectinstancen sein. Der Namen "Static" ist im obigen Sourcepiece reine Definitionssache. Es gibt keine von PASCAL vorgegebenen Mechanismen um Deine Anforderungen zu erfüllen. Deshalb "missbraucht" obiger Code die Zugriffsmethoden einer Objectproperty um eine "statisches"/"globales" Member einzuführen. Im Grund ist dieses in der Klasse NUR als Property vorhanden, gespeichert wird es in FStatic als ganz normale globale Variable/Konstante.

        Gruß Hage

        Comment

        Working...
        X