![]() |
Delphi-Version: XE5
Warum ist 'nil' einem TObject ähnlicher als einem IInterface?
Gut, man muss einmal drüber stolpern und weiß es dann. Aber steht das irgendwo geschrieben, dass es so ist? Oder gibt es vielleicht sogar einen Grund?
Delphi-Quellcode:
Immerhin kann man sich darüber stören dass das nicht mit der IDE-Vorschau ("Code Insight"?) übereinstimmt, dass beispielsweise die IInterface-Version fett dargestellt wird, aber in Wirklichkeit die TObject-Version aufgerufen wird.
program Project2;
{$APPTYPE CONSOLE} {$R *.res} procedure someProc(param: IInterface); overload; begin // end; procedure someProc(param: TObject); overload; begin // end; begin someProc(nil); // er springt in someProc(const param: TObject); readln; end. |
AW: Warum ist 'nil' einem TObject ähnlicher als einem IInterface?
Code Insight nimmt die erste Deklaration, die passt. Wenn du die beiden Prozeduren in anderer Reihenfolge deklarierst, springt er bei Ctrl-Click auch auf die richtige.
|
AW: Warum ist 'nil' einem TObject ähnlicher als einem IInterface?
Zitat:
![]() Zitat:
Bei nil ist die Reihenfolge ein bisschen wirr und zwar wie folgt (durch Testen rausgefunden ;)): typisierter Pointer (E2251 bei zwei unterschiedlichen) untypisierter Pointer TObject Nachfahre (E2251 bei zwei unterschiedlichen) TObject IInterface Nachfahre (E2251 bei zwei unterschiedlichen) IInterface Klassenreferenz (E2251 bei zwei unterschiedlichen) |
AW: Warum ist 'nil' einem TObject ähnlicher als einem IInterface?
Du kannst ja dennoch bestimmen wo er rein soll.
Delphi-Quellcode:
someProc(IInterface(nil));
Und sowas geht auch.
Delphi-Quellcode:
Aber ansonsten sollte man eigentlich wissen, daß Delphi (fast) immer die letzte "passende" Deklaration verwendet, also die Erste (von unten/hinten), welche es im aktuellen Skope findet.
program Project2;
{$APPTYPE CONSOLE} {$R *.res} procedure someProc(param: IInterface=nil); overload; begin // end; procedure someProc(param: TObject); overload; begin // end; begin someProc; readln; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:47 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