Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Helper Class für Integer/String


Mrs. Sheep - Do 12.03.09 18:27
Titel: Helper Class für Integer/String
Ist es möglich dem Int32 / String Prozeduren hinzuzufügen, wie zB die .ToString Methode?
Es geht mir darum, Strings und Zahlen in der arabischen Schrift darzustellen. Den Code habe ich (mehr oder weniger) komplett. Also dann zum Beispiel

Delphi-Quelltext
1:
2:
myWideString:=myString.ToArabic;
myOtherWideString:=myInt32.ToArabic;

Bei folgender Deifinition erhalte ich den Fehler "Klassentyp erwartet" (1)

Delphi-Quelltext
1:
2:
3:
4:
TYPE CArabic = CLASS HELPER FOR System.Int32
    END;
TYPE CArabic = CLASS HELPER FOR TWinForm1
    END;


(3) funktioniert;

Kennt irgendjemand einen Weg das zu implementieren?


Mrs. Sheep - Fr 13.03.09 15:17

Ich habe ein bisschen rumgespielt, und kam darauf das TOBJECT die Lösung seien müsste.
Nächster Punkt wäre dann: Wie sage ich TObject das ich das Objekt von dem ich die Prozedur aufrufe als Paramter brauche?


Yogu - Fr 13.03.09 16:10

Hallo,

leider muss ich dich enttäuschen: Es gibt in Delphi keine Hilfsfunktionen à la C++. Stattdessen wird durch normale Funktionen umgewandelt:


Delphi-Quelltext
1:
2:
3:
4:
function StrToArabic(const S: String): WideString;
begin
  Result := { bla };
end;

Grüße,
Yogu


Kha - Fr 13.03.09 17:07

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
leider muss ich dich enttäuschen: Es gibt in Delphi keine Hilfsfunktionen à la C++.
Als was würdest du Class Helpers dann bezeichnen ;) ?

@user profile iconMrs. Sheep: Das sieht nicht gerade nach Delphi.Win32 aus (Class Helpers gibt's bei beiden), sondern eher nach dem toten Delphi.NET. Mit dessen Nachfolger, Delphi Prism, ist das kein Problem: Extension Methods [http://prismwiki.codegear.com/en/Extension_Methods_(Writing)].


Yogu - Fr 13.03.09 17:14

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
leider muss ich dich enttäuschen: Es gibt in Delphi keine Hilfsfunktionen à la C++.
Als was würdest du Class Helpers dann bezeichnen ;) ?

@user profile iconMrs. Sheep: Das sieht nicht gerade nach Delphi.Win32 aus (Class Helpers gibt's bei beiden)

Sowas gibts in Delphi? Hab ich ehrlich gesagt noch nie gesehen. Aber Tatsache - es funktioniert. Heißt das dann, dass man einen String als Klasse definieren muss? Das halte ich in Punkten Performance für sehr fragwürdig :gruebel:


Kha - Fr 13.03.09 17:52

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
Heißt das dann, dass man einen String als Klasse definieren muss? Das halte ich in Punkten Performance für sehr fragwürdig :gruebel:
(Abgesehen davon, dass es 90% der genutzten Programmiersprachen genau so machen:) Was wäre daran schlecht? String ist schon ein Referenztyp, außer einem kleinen zusätzlichen Pointer zu den Metadaten dürfte die Umwandlung in eine Klasse nicht viel Overhead mit sich bringen - das wäre es allemal wert. Gut, Delphis automagische Referenzzählung und Klonung von Strings müsste dann vielleicht anders gelöst werden.
Nötig ist das ganze allerdings nicht ;) , Class Helpers/Extension Methods sind reiner Syntax Sugar. Aus

Delphi-Quelltext
1:
myString.ToArabic                    

wird im Compiler also wieder ein gewöhnliches

Delphi-Quelltext
1:
TArabicHelper.ToArabic(myString)                    


Mrs. Sheep - Fr 13.03.09 21:18

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:

Nötig ist das ganze allerdings nicht ;)

So wirklich NÖTIG ist nichts von dem was ich programmiere außerdem:
eine Multiplikation kann man auch durch ausschreiben der Faktoren erreichen,
die Multiplikation ist trotzdem schöner.

Um zum Problem zurückzukommen: Wie definiere ich den Spaß für
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:

 myString.ToArabic

??

Und wegen "das tote Delphi .NET" : Delphi 2005 .NET PE -> Kostenlos!
Mehr interessiert mich als Legaler(naja)-Hobbyprogrammierer nicht;
wenn ich nicht bei FreePascal und Konsolen-Anwendung oder dem verbuggten Lazarus bleiben will.


Kha - So 15.03.09 18:33

user profile iconMrs. Sheep hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:

Nötig ist das ganze allerdings nicht ;)

So wirklich NÖTIG ist nichts von dem was ich programmiere
Das war noch auf Yogus Frage, ob String dann nicht eine Klasse werden müsste, bezogen :oops: .

BTT:
user profile iconMrs. Sheep hat folgendes geschrieben Zum zitierten Posting springen:
Nächster Punkt wäre dann: Wie sage ich TObject das ich das Objekt von dem ich die Prozedur aufrufe als Paramter brauche?
In der Class-Helper-Funktion zeigt Self wie in einer gewöhnlichen Methode auf das aufrufende Objekt.

user profile iconMrs. Sheep hat folgendes geschrieben Zum zitierten Posting springen:
Und wegen "das tote Delphi .NET" : Delphi 2005 .NET PE -> Kostenlos!
Wenn schon kostenlos, dann bitte Turbo Explorer Delphi.Win32. Delphi.NET ist war einfach nix Halbes und nix Ganzes.