Meine Klasse sieht (gekürzt) so aus:
Delphi-Quellcode:
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;
Benutzt werden soll die Klasse wie folgt:
Delphi-Quellcode:
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;
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.
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?