![]() |
Delphi-Version: 5
Keine Compiler-Warnung bei Unterklassen, dafür doppelt bei Interfaces
Sorry für den langen Beitrag, es liest sich schneller als es aussieht.
Man nehme folgende Definition:
Delphi-Quellcode:
Rufe ich
type
TMyObject = class public procedure a(); virtual; procedure b(); experimental; end; TMySubObject = class(TMyObject) public procedure a(); override; experimental; end;
Delphi-Quellcode:
auf, erhalte ich in dieser Zeile eine Warnung
b()
Delphi-Quellcode:
. Tue ich es nicht, erhalte ich keine Warnung. Soweit, alles bestens :thumb:
W1003 SYMBOL_EXPERIMENTAL
Nun zu Methode a(): Sie ist virtuell und wird in der Unterklasse überschrieben. Die Implementation möchte ich als
Delphi-Quellcode:
kennzeichnen. Ich erhalte aber weder eine Warnung beim Instanziieren einer
experimental
Delphi-Quellcode:
-Instanz, noch beim Aufrufen der Methode
TMySubObject
Delphi-Quellcode:
:
TMyObject.a()
Delphi-Quellcode:
procedure p();
var myObject: TMyObject; begin myObject := TMySubObject.Create(); myObject.a(); // Keine einzige Warnung end; Das kann man wahrscheinlich sogar irgendwie begründen, aber ich sehe spontan nur dass es beispielsweise völlig inkonsistent ist wenn ich die Klasse nun ein Interface implementieren lasse:
Delphi-Quellcode:
Hier wirft die Deklaration von
type
IMyInterface = interface procedure a(); procedure b(); end; TMyObject = class(TInterfacedObject, IMyInterface) // << W1003 public procedure a(); experimental; procedure b(); end; // << W1003
Delphi-Quellcode:
gleich zwei mal die selbe Warnung, selbst wenn die Klasse
TMyObject
Delphi-Quellcode:
nirgendwo im Code verwendet und vom Linker wieder entfernt wird.
TMyObject
Spätestens jetzt komme ich überhaupt nicht mehr hinterher. Macht das alles noch irgendwie Sinn und ich sehe den nur nicht? |
AW: Keine Compiler-Warnung bei Unterklassen, dafür doppelt bei Interfaces
Zitat:
TMyObject kennt das TMySubObject garnicht und kann demnach auch nicht darauf reagieren, außerdem weiß der Compiler bei myObject nicht was zur Laufzeit für eine Instanz drin ist, somit kann er sich nur auf die Deklaration von TMyObject stüzen. experimental ist halt ein experiemtelles Feature, was sonst niemand verwendert ... gut möglich, dass es bei den Interfaces ein paar unentdeckte Bugs gibt. :stupid: |
AW: Keine Compiler-Warnung bei Unterklassen, dafür doppelt bei Interfaces
Eigentlich ist experimental nur für Units gedacht:
Zitat:
|
AW: Keine Compiler-Warnung bei Unterklassen, dafür doppelt bei Interfaces
Zitat:
Zitat:
![]() Ich kann auch einer ganzen Unit ein experimental verpassen, aber sehr wohl auch einzelnen Methoden oder ganzen Klassen. Der eingangs geschilderte Fall mit der Methode
Delphi-Quellcode:
ist ja auch ein absolutes Positivbeispiel, so sollte es sein.
b()
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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