Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: function FillString_list(Value: array of [string; TCode])

  Alt 16. Sep 2024, 20:50
überladene Funktionen
Delphi-Quellcode:
function FillString_list(Value: array of string): TStrings; overload;
function FillString_list(Value: array of TCode): TStrings; overload;
oder OperatorOverloading (macht aus dem String ein TCode)
https://docwiki.embarcadero.com/RADS...toren_(Delphi)
Delphi-Quellcode:
type
  TCode = record
    Wort: string;
    Bezeichnung: string;
    class operator Implicit(const Value: string): TCode;
  end;

function FillString_list(Value: array of TCode): TStrings;
Implicit = automatisch bei Übergabe an Variablen, Parameter oder Property des Zieltyps.
Explicit = ein direkter Cast ala TCode('ein StringKonstante oder eine StringVariable/Property/FunctionResult') (der Cast nimmt auch das Implicit, wenn es kein Explicit gibt)

Aber das hier FillString_list(xxx).Text; kannst du komplett vergessen, bei deinem aktuellen Design, da es keine automatische Speicherverwaltung für Objekte gibt, ergibt das ein wunderschönes Speicherleck.
-> Interface ala IStrings oder TArray<string> oder einen Record (drin mit einem Array oder als CustomManagedRecord) als Result
-> oder die StringList wird intern gespeichert und durch jemand anderen freigegeben, außerhalb dieser Funktion.
Ansonsten mußt das TStrings/TStringList in eine Variable speichern und selbst ein Free machen.

Ansonsten sollte man solche Funktionen auch besser so benennen, dass sie das Result "erstellen", damit jeder gleich weiß, dass er es freigeben muß. (z.B. noch ein Create, Build, Make oder Ähnliches in den Namen)
$2B or not $2B

Geändert von himitsu (16. Sep 2024 um 20:56 Uhr)
  Mit Zitat antworten Zitat