Dies könnte wie eine wirklich dumme Frage erscheinen, aber ich weiß nicht, warum dies auch zu kompilieren erlaubt ist:Warum erlaubt Delphi, dass Konstruktorparameter falsch sind?
program ConstructorWithParam;
{$APPTYPE CONSOLE}
uses
System.SysUtils;
type
TThing = class(TObject)
private
FParent: TObject;
public
constructor Create(const AParent: TObject);
end;
{ TThing }
constructor TThing.Create; // <- WTF? Why does the compiler not complain?
begin
FParent := AParent;
end;
var
Thing: TThing;
begin
try
Thing := TThing.Create(TObject.Create);
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
I Delphi XE5 bin mit und nicht auf anderen Versionen getestet. Danke.
Danke Ken, ich benutze Delphi seit 15 Jahren und ich wusste das nicht! Und ich stimme zu - ich bevorzuge die Schnittstelle, um die Implementierung anzupassen. Ich nehme an, dass dies nur bei überladenen Methoden nicht der Fall ist? –
TurboPASCAL 5.0 führte dies ein. –
Beachten Sie, dass der Compiler das nur zulässt, wenn keine Parameter angegeben sind. Wenn sie angegeben sind, müssen sie übereinstimmen oder der Compiler wird sich beschweren. Dies war eine Sprachfunktion von Pascal, die vor Delphi war. –