Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prüfen und Casten auf einen Rutsch (https://www.delphipraxis.net/169425-pruefen-und-casten-auf-einen-rutsch.html)

himitsu 19. Jul 2012 07:57

AW: Prüfen und Casten auf einen Rutsch
 
Zitat:

Zitat von uligerhardt (Beitrag 1175160)
Delphi-Quellcode:
if TryCast<TEdit>(Sender, Edit) then
  Edit.Text := 'tut';
Leider kann Delphi (noch) keine globalen generischen Routinen. (Warum eigentlich?)

Das wüste ich auch gerne, dazumal ich sogar mal eine "Lösung" genannt hatte, wie man es dennoch umgehn könnte.
Einfach eine implizite Klasse drum, um die Funktion, und schon ginge es ohne große Änderung des Compilers.

Nja, aber wenn du OOP mit arbeitest, und diese "Funktion innerhalb von Methoden verwendest, dann kannst du immernoch den ClassHelper verwenden.
Und im Notfall kombiniert man einfach Beides.
Delphi-Quellcode:
  TCastHelper = class helper for TObject
    class function TryCast<TCastType: Class>(Source: TObject; out Target: TCastType): Boolean; overload;
    function TryCast<TCastType: Class>(out Target: TCastType): Boolean; overload;
  end;
Delphi-Quellcode:
// z.B. im ButtonClick:
if x.TryCast(y) or TryCast(x, y) then

Uwe Raabe 19. Jul 2012 11:46

AW: Prüfen und Casten auf einen Rutsch
 
Zitat:

Zitat von himitsu (Beitrag 1175163)
Zitat:

Zitat von uligerhardt (Beitrag 1175160)
Leider kann Delphi (noch) keine globalen generischen Routinen. (Warum eigentlich?)

Das wüste ich auch gerne, dazumal ich sogar mal eine "Lösung" genannt hatte, wie man es dennoch umgehn könnte.
Einfach eine implizite Klasse drum, um die Funktion, und schon ginge es ohne große Änderung des Compilers.

Globale Prozeduren und Funktionen sind ja sowas von out 8-) - man nimmt dafür jetzt statische Klassenmethoden in Records.

himitsu 19. Jul 2012 11:49

AW: Prüfen und Casten auf einen Rutsch
 
Ja, ich hab mir z.B. ein generisches IfThen gebastelt (z.B. für Enums und Klassen) und weißt du wie blöd das
Delphi-Quellcode:
TGenerics.IfThen<TIrgendwas>(...)
aussieht?
Ich hätte es da lieber als überladene Prozedur zu den anderen existierenden IfThen's gehabt. :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz