Sorry für den langen Beitrag, es liest sich schneller als es aussieht.
Man nehme folgende Definition:
Delphi-Quellcode:
type
TMyObject = class
public
procedure a(); virtual;
procedure b(); experimental;
end;
TMySubObject = class(TMyObject)
public
procedure a(); override; experimental;
end;
Rufe ich
b()
auf, erhalte ich in dieser Zeile eine Warnung
W1003 SYMBOL_EXPERIMENTAL
. Tue ich es nicht, erhalte ich keine Warnung. Soweit, alles bestens
Nun zu Methode a(): Sie ist virtuell und wird in der Unterklasse überschrieben. Die Implementation möchte ich als
experimental
kennzeichnen. Ich erhalte aber weder eine Warnung beim Instanziieren einer
TMySubObject
-Instanz, noch beim Aufrufen der Methode
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:
type
IMyInterface = interface
procedure a();
procedure b();
end;
TMyObject = class(TInterfacedObject, IMyInterface) // << W1003
public
procedure a(); experimental;
procedure b();
end; // << W1003
Hier wirft die Deklaration von
TMyObject
gleich
zwei mal die selbe Warnung, selbst wenn die Klasse
TMyObject
nirgendwo im Code verwendet und vom Linker wieder entfernt wird.
Spätestens jetzt komme ich überhaupt nicht mehr hinterher. Macht das alles noch irgendwie Sinn und ich sehe den nur nicht?