![]() |
AW: Wer macht den Free?
Wegen genau dieser Problematik meide ich Funktionen, die Klasseninstanzen zurückgeben, welche erst innerhalb der Funktion erzeugt werden, wie der Teufel das Weihwasser. Etwas anders ist es bei Interfaces, da ist es dann eben ein TInterfacedObject, aber das muss den Aufrufer ja nicht interessieren. Außerdem schließt man somit die unnötige Verschwendung von Bits und Bytes (:mrgreen:) wie hier aus:
Delphi-Quellcode:
function TMyClass.GetNames: TStrings;
var List: TStringlist; begin List := TStringlist.Create; //Liste beispielhaft befüllen List.Add('Heinz'); List.Add('Hans'); List.Add('August'); Result := List; end; procedure TMyClass.VerarbeiteNames; var i: integer; begin for i := 0 to GetNames.Count - 1 do Stringverarbeitung(GetNames[i]); end; |
AW: Wer macht den Free?
Zitat:
Gegen das Instanzieren innerhalb einer Funktion spricht überhaupt nichts, wenn es im Funktionsnamen ersichtlich ist. Ich verwende öfters Funktionen, die eine Instanz erzeugen. Kleines Beispiel: Eine Stringlist ist bei mir in den meisten Fällen sortiert und lässt keine Duplikate zu. Ist normalerweise ein Dreizeiler.
Delphi-Quellcode:
Dafür gibt es bei mir folgende Funktion (so ähnlich)
sl:=TStringlist.create;
sl.sorted := True; sl.duplicates := dupignore;
Delphi-Quellcode:
Aufrufen muss ich dann nur noch
Function TStringlistSortedDupIgnore_Create;
begin result := TStringlist.create; result.sorted := True; result.duplicates := dupignore; end;
Delphi-Quellcode:
sl := TStringlistSortedDupIgnore_Create;
Aus drei Zeilen mach eine. Finde ich sehr praktisch. |
AW: Wer macht den Free?
Zitat:
Delphi-Quellcode:
:oops:
SL := TStringlist.Create; SL.Sorted := True; SL.Duplicates := dupIgnore;
Delphi-Quellcode:
Und dann auch nur noch
type
TStringListHelper = class helper for TStringList //constructor CreateDup; class function CreateDup: TStringList; static; end; class function TStringListHelper.CreateDup: TStringList; begin Result := TStringlist.create; Result.Sorted := True; Result.Duplicates := dupIgnore; end;
Delphi-Quellcode:
, was Dank CodeInsight auch leichter zu finden ist.
SL := TStringList.CreateDup;
Wäre nur toll, wenn Embarcadero es nach 11 Jahren endlich mal hinbekommt, dass man mehrere Helper an eine Klasse binden kann, ohne dort krankhaft mit Vererbung arbeiten zu müssen, was oftmal garnicht möglich ist. Ja, statt Listen geben ich auch gern dynamische Arrays zurück, was aber nur gut nutzbar ist, wenn die Liste in der Funktion gefüllt und außerhalb nicht verändert wird. |
AW: Wer macht den Free?
Zitat:
Zitat:
Die Codevervollständigung geht auch so prima. Einfach TStringlist ohne Punkt tippen und dir werden nach Ctrl-Leer alle Funktionen angezeigt. |
AW: Wer macht den Free?
Oder du arbeitest mit Delphi Berlin und hast
Delphi-Quellcode:
/// <summary>
/// This constructor creates new string list with specified Duplicates, /// Sorted and CaseSensitive property values. /// </summary> constructor Create(Duplicates: TDuplicates; Sorted: Boolean; CaseSensitive: Boolean); overload; |
AW: Wer macht den Free?
Zitat:
Dazu müsste aber der Constructor von TStringlist auch als Overload deklariert sein. Oder? Kurz in die RTL (Berlin) geschaut.... Tatsächlich, das Create der TStringlist ist mit overload deklariert. Insgesamt gibt es Für die Stringlist fünf verschiedene Constructoren. Man, man. Wenn man mal 2 Tage nicht in die RTL schaut ;-) Seit wann ist das? |
AW: Wer macht den Free?
Zitat:
|
AW: Wer macht den Free?
Das mit dem überladenen Construktor vom Create hätte ich ohne Euch nie gemerkt!
Genau so das TMemo.LoadFromFile(filename,Encoding) ... Warum zeigt die Codevervollständigung nicht an dass es überladene Versionen des Create oder LoadFromFile gibt??? Mein Berlin 10.1 Update 2 tut dies jedenfalls nicht ;-( Ciao Stefan |
AW: Wer macht den Free?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 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