Schade, das man das in Object Pascal das 'Create' als Methode vorgesehen und nicht einfach das 'New' erweitert hat. Dabei könnte man jegliche Instantiierungslogik (grauselig!) aus dem Konstruktor und in eine normale Methode verbannen.
Delphi-Quellcode:
Var
a : TSomeClass;
c : TClass;
b : TSomeClassWithParametrizedConstructor;
Begin
new(a);
assert (a is TSomeClass);
new(a, TSomeDerivedClass);
assert (a is TSomeClass);
assert (a is TSomeDerivedClass);
c := TSomeClass;
new (a,c);
assert (a is TSomeClass);
new(b).MyCreateMethod(x,y,z);
assert (b is TSomeClassWithParametrizedConstructor);
Dann wäre auch gleich das Problem des Aufrufs virtueller Methoden im Konstruktor vom Tisch. Aber Objectpascal ist ja auch schon bald 30 Jahre alt und bei C# ist das Problem auch noch aktuell.