Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Generelle Frage Typkonvertierung (https://www.delphipraxis.net/192044-generelle-frage-typkonvertierung.html)

sko1 16. Mär 2017 09:33

Delphi-Version: 10 Berlin

Generelle Frage Typkonvertierung
 
Hallo,

ich finde immer wieder mal z.B. in Ereignisbehandlungsroutinen so was:

Delphi-Quellcode:
 TButton(Sender).Tag


aber auch so was

Delphi-Quellcode:
(Sender as TButton).Tag


Gibt es eigentlich Unterschiede zwischen beiden Varianten und falls ja, welche?

Ciao
Stefan

mkinzler 16. Mär 2017 09:39

AW: Generelle Frage Typkonvertierung
 
Ja. Beim ersten handelt es sich um einen harten Typcast. Es wird nichts geprüft.
Das 2. Beispiel ist ein softer Cast. Eigentlich

Delphi-Quellcode:
if (Sender is TButton) then
  TButton(Sender).Tag

Luckie 16. Mär 2017 10:01

AW: Generelle Frage Typkonvertierung
 
Bei ersten bekommst du einen Schlag in die Fresse, wenn es schief geht und bei zweiteren wirst du mit Wattebällchen beworfen. :mrgreen:

sko1 16. Mär 2017 10:32

AW: Generelle Frage Typkonvertierung
 
OK, danke, verstanden ;-)

Ciao
Stefan

freimatz 16. Mär 2017 12:42

AW: Generelle Frage Typkonvertierung
 
Zitat:

Zitat von mkinzler (Beitrag 1364378)
Ja. Beim ersten handelt es sich um einen harten Typcast. Es wird nichts geprüft.
Das 2. Beispiel ist ein softer Cast. Eigentlich

Delphi-Quellcode:
if (Sender is TButton) then
  TButton(Sender).Tag

Sehe ich es falsch, dass das oben falsch ist?
Bei "(Sender as TButton).Tag" bekomme ich doch eine exception wenn es nicht stimmt. Dagegen bei "if (Sender is TButton) then TButton(Sender).Tag" passiert doch einfach gar nichts. Oder?

DeddyH 16. Mär 2017 12:51

AW: Generelle Frage Typkonvertierung
 
Bei Verwendung des as-Operators kommt bei Type-Mismatch eine Exception. Es empfiehlt sich daher, diesen zu verwenden, wenn der Typ stimmen muss. Nimmt man dagegen einen harten Cast mit vorheriger is-Prüfung, so wird der "Cast-Code" gar nicht erst ausgeführt, wenn der Typ nicht stimmt. Das kann man z.B. dann verwenden, wenn der zu prüfende Objekttyp nicht zur Designtime feststeht.

himitsu 16. Mär 2017 16:06

AW: Generelle Frage Typkonvertierung
 
Zitat:

Zitat von mkinzler (Beitrag 1364378)
Das 2. Beispiel ist ein softer Cast. Eigentlich

Delphi-Quellcode:
if (Sender is TButton) then
  TButton(Sender).Tag

Delphi-Quellcode:
if (Sender is TButton) then
  TButton(Sender).Tag
else
  raise Exception.......


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:09 Uhr.

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