![]() |
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 |
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 |
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:
|
AW: Generelle Frage Typkonvertierung
OK, danke, verstanden ;-)
Ciao Stefan |
AW: Generelle Frage Typkonvertierung
Zitat:
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? |
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.
|
AW: Generelle Frage Typkonvertierung
Zitat:
Delphi-Quellcode:
if (Sender is TButton) then
TButton(Sender).Tag else raise Exception....... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 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