(Co-Admin)
Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
Delphi 11 Alexandria
|
Re: TStringList - Zugriffsverletzung beim erstellen
27. Nov 2009, 20:54
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
|
|
Zitat
|