![]() |
[OOP]: Typenumwandlung / Casten
|
Re: [OOP]: Typenumwandlung / Casten
Zitat:
Zitat:
Aus der OH: Der Operator as führt eine Typumwandlung mit Laufzeitprüfung durch. Der Ausdruck Objekt as Klasse gibt eine Referenz auf dasselbe Objekt wie Objekt, aber mit dem von Klasse angegebenen Typ zurück. Zur Laufzeit muss Objekt eine Instanz von Klasse oder einem ihrer Nachkommen bzw. nil sein. Andernfalls wird eine Exception ausgelöst. Dass heisst, dass du mit as sicherstellen kannst, dass nur gültige Downcasts (s.u.) durchgeführt werden, und sonst eine Exception ausgelöst wird. Zitat:
Zitat:
Bsp:
Delphi-Quellcode:
type
TClass1 = class public Wert: Integer; end; TClass2 = class(TClass2) public Buchstabe: Char; end; . . var C1: TClass1; C2: TClass2; . . // Dies ist ein gültiger Downcast C1 := C2 as TClass1; // Das hier ein nicht möglicher Upcast C2 := C1 as TClass2; Zitat:
Ich hoffe das war soweit alles richtig - müsste aber ;) gruss, dizzy |
Re: [OOP]: Typenumwandlung / Casten
Danke für die Hilfe! :-D
Letze Frage: Was ist der Unterschied zwischen Typ() und as? Lediglich die Laufzeitprüfung? Danke :-D |
Re: [OOP]: Typenumwandlung / Casten
Zitat:
|
Re: [OOP]: Typenumwandlung / Casten
Danke für die Hilfe! :-D
Möchte mich ganz besonders bei:
Für mich [Erledigt]! |
Re: [OOP]: Typenumwandlung / Casten
Zitat:
Voraussetzung ist allerdings, das das Ding vorher irgendwie (z.B. durch einen Prozeduraufruf) schon heruntergecasted wurde. Beispiel:
Delphi-Quellcode:
Hier wird ein TObject also hochgecasted, und das in den verschiedenen möglichkeiten. Sowas wird meistens dann verwendet, wenn man ein OnClick-Event für verschiedene Buttons verwendet und / oder mit dem entprechenden Control gleich was machen will (z.B. deaktivieren oder so).
procedure TForm1.Button1Click(Sender: TObject);
begin // harter upcast TButton(Sender).Caption := 'clicked'; // soft upcast (Sender as TButton).Caption := 'clicked'; // ganz sicher: if sender is TButton then with sender as TButton do begin Caption := 'clicked'; end; end; |
Re: [OOP]: Typenumwandlung / Casten
Moin Zusammen,
noch ein kleiner Unterschied zwischen Typ() und as: Bei Typ() übernimmt, sozusagen, der Entwickler die Verantwortung, dass der Typecast zur Laufzeit gültig ist, bei as kann, u.U., schon zur Compilierzeit geprüft werden, ob der Typecast gültig ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 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 by Thomas Breitkreuz