Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Was bedeudet 'as' in Delphi? (https://www.delphipraxis.net/5375-bedeudet-delphi.html)

Ignazo 4. Jun 2003 08:10


Was bedeudet 'as' in Delphi?
 
Delphi-Quellcode:
procedure TPanelX.InitializeControl;
begin
  FDelphiControl := Control as TPanel; //<== Was passiert hier?
  FDelphiControl.OnCanResize := CanResizeEvent;
  FDelphiControl.OnClick := ClickEvent;
  FDelphiControl.OnConstrainedResize := ConstrainedResizeEvent;
  FDelphiControl.OnDblClick := DblClickEvent;
  FDelphiControl.OnResize := ResizeEvent;
end;

Sanchez 4. Jun 2003 08:15

Control ist von irgeneinem Typ, eventuell TControl.
FDelphiControl ist vom Typ TPanel. Der as Operator macht eine Panele aus Control. Ist Control nicht mit TPanel verwandt, bekommst du eine Exception.

mfg Daniel

r_kerber 4. Jun 2003 08:27

In der OH (Lesen bildet :lol: ) steht folgendes:
Zitat:

Wenn Klassen Schnittstellen implementieren, können sie den Operator as für die dynamische Bindung an die Schnittstelle verwenden.

Ignazo 4. Jun 2003 08:34

Also wenn ich das richtig verstehe ist das nur so eine Art absicherung, oder :?:

r_kerber 4. Jun 2003 08:37

Wohl eher eine Art notwendiger Typecast.

Christian Seehase 4. Jun 2003 09:26

Moin Sanchez,

Zitat:

Zitat von Sanchez0815
Der as Operator macht eine Panele aus Control

Nein, er sorgt nur dafür, das der Compiler Control als vom Typ TPanel ansieht.

Prinzipiell ginge statt

Delphi-Quellcode:
control as TPanel
auch

Delphi-Quellcode:
TPanel(Control)
und eine Exception gäbe es nur, wenn, in diesem Falle FDelphiControl, Methoden/Eigenschaften eines TPanel zu nutzen versuchen würde, die es in der durch Control angegebenen Kompo nicht gibt.

Mit diesem Typecast übernimmt man sozusagen dem Compiler gegenüber die Verantwortung dafür, dass Control auch wirklich als TPanel verwendbar ist.

Sanchez 4. Jun 2003 09:36

Mit TPanel(control) übernimmt man selbst die Verantwortung.
Mit control as TPanel allerdings nicht, weil eine Typprüfung durchgeführt wird.

Zitat:

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 muß Objekt eine Instanz von Klasse oder einem ihrer Nachkommen bzw. nil sein. Andernfalls wird eine Exception ausgelöst. Wenn der deklarierte Typ von Objekt nicht mit Klasse verwandt ist (wenn die Typen also unterschiedlich und nicht voneinander abgeleitet sind), gibt der Compiler eine Fehlermeldung aus.
Quelle: Delphi-Hilfe

mfg Daniel

Christian Seehase 4. Jun 2003 10:26

Moin Sanchez,

Stimmt, :oops:, hast Du auch wieder Recht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 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