![]() |
AW: Parameter mit multiplen Typen
Krass was für eine Auswahl wir mittlerweile in Delphi haben.
-Typloser Buffer -Variant -Varianter Record -TValue aus RTTI (Das sieht mal ultra komvortabel aus) Nur um das noch mal zusammen zu fassen. |
AW: Parameter mit multiplen Typen
:thumb:
Nur dass nicht jemand meint die Liste wäre komplett: es gibt da noch mehr. Zum Beispiel Klasse mit denen man Daten polymorph abbilden kann. Und am Besten noch interfaces dazu. |
AW: Parameter mit multiplen Typen
Meine Klasse sieht (gekürzt) so aus:
Delphi-Quellcode:
Benutzt werden soll die Klasse wie folgt:
TtuString = class(TPersistent)
// ... protected procedure SetText(Value: String); virtual; function UpdateText(AText: String): TtuString; virtual; procedure DoChanged; virtual; public constructor Create(AText: String = ''); reintroduce; overload; virtual; constructor Create(AText: TtuString); reintroduce; overload; virtual; // ... function IsEmpty: Boolean; function IsNotEmpty: Boolean; function Count: Integer; function Length: Integer; // ... function Insert(AText: String; APosition: Integer = 0): TtuString; overload; virtual; // ... function Surround(AText: String): TtuString; overload; virtual; // ... function Replace(ASearchText: String; AReplaceText: String; AReplaceFlags: TReplaceFlags = [rfReplaceAll]): TtuString; overload; virtual; function Replace(ASearchText: TtuString; AReplaceText: TtuString; AReplaceFlags: TReplaceFlags = [rfReplaceAll]): TtuString; overload; virtual; // ... published property OnChanged: TNotifyEvent read FOnChanged write FOnChanged; property Text: String read FText write SetText; end;
Delphi-Quellcode:
Jetzt möchte ich die Klasse so gestalten, dass auch bereits existierende TtuString-Instanzen an die vielen, vielen String-Manipulations-Methoden (wie bei Replace zu sehen ist...) übergeben werden können.
var
Str: TtuString; begin Str := TtuString.Create('Hallo, Welt!'); try // Folgender Aufruf ersetzt zuerst ', Welt!' mit einem Leerstring, // fügt dann ein Ausrufezeichen an und stellt dem neuen String // drei Unterstriche voran bzw. hängt diese auch an... Str.Replace(', Welt!', '').Insert('!').Surround('___'); // Folgendes gibt aus: '___Hallo!___' ShowMessage(Str.Text); finally FreeAndNil(Str); end; end; Ich werde dafür auf die Variante mit TValue von Uwe Raabe zurückgreifen. Ich finde das diese Lösung am ehesten passt. Was meint ihr? TtuString als Record zu definieren und mit diversen "class operator"-Routinen auszustatten, hätte aber auch was... By the way: Für das verschachtelte aufrufen (.Replace().Insert()...) gibt es einen speziellen Namen. Wie genau heißt dieses Schema oder Prinzip? |
AW: Parameter mit multiplen Typen
Zitat:
![]() Bis bald... Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 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