Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TStringList - Zugriffsverletzung beim erstellen (https://www.delphipraxis.net/144001-tstringlist-zugriffsverletzung-beim-erstellen.html)

Christian Seehase 27. Nov 2009 19:54

Re: TStringList - Zugriffsverletzung beim erstellen
 
Moin Stift,

probiers's doch mal so:
(Ich hoffe, die Kommentare helfen Dir weiter)

Delphi-Quellcode:
type
  // Wenn man von TObject ableitet ist es zwar nicht erforderlich das direkt mit anzugeben,
  // ich empfinde es aber als angenehmer die Basisklasse immer explizit anzugeben
  // TTest, da ein neuer Typ immer mit grossem T anfangen sollte
  TTest = class(TObject)

  // Interne Felder als private deklarieren, da sie nicht ausserhalb der Unit in der die
  // Klasse deklariert wurde sichtbar sein sollten (eben intern)
  // Diese sollten immer mit einem grossen F beginnen
  private
    FAll   : TStringList;
    FMale  : TStringList;
    FFemale : TStringList;

  // Was von aussen zugänglich sein soll, mit der Sichtbarkeit public versehen, damit
  // sie überall zugänglich sind, wo die Klasse instanziert wird.
  public

    // Der Konstruktor sollte auch immer so benannt werden, auch wenn es sich
    // eigentlich um eine Funktion handelt.
    constructor Create;

    // Da im Konstruktor Resourcen belegt werden müssen diese auch wieder freigegeben werden,
    // deshalb wird ein Destruktor benötigt
    destructor Destroy; override;

    // Die internen Felder nur als Eigenschaften zugänglich machen
    // Wenn es sich um Objekte handelt, die von der Klasse selber verwaltet werden, wie in
    // diesem Falle sollte man keinesfalls Schreibzugriff ermöglichen, deshalb kein write.
    property All   : TStringList read FAll;
    property Male  : TStringList read FMale;
    property Female : TStringList read FFemale;
  end;

  implementation

  constructor TTest.Create;
  begin
    // inherited ist bei der Ableitung von TObject zwar nicht notwendig, würde ich aber
    // sicherheitshalber auch hier mit angeben, falls der Constructor von TObject mal
    // mit Inhalt gefüllt wird.
    inherited;    
    FAll   := TStringList.Create;
    FMale  := TStringList.Create;
    FFemale := TStringList.Create;
  end;

  destructor TTest.Destroy;
  begin
    // Auf das ansonsten meist zu empfehlende FreeAndNil kann man hier verzichten, da
    // die internen Felder nach Abarbeitung des Destruktors in keinem Falle mehr
    // angesprochen werden.
    FAll.Free;
    FMale.Free;
    FFemale.Free;
    // Für das inherited bei Destruktor gilt hier das gleiche wie beim Konstruktor
    inherited;
  end;

stiftII 27. Nov 2009 22:55

Re: TStringList - Zugriffsverletzung beim erstellen
 
Wow, bin überwältigt.

Danke für die ausführliche Antwort!, habe ne Menge gelernt !! :)

~stift


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 Uhr.
Seite 2 von 2     12   

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