What I mean is that if you want to instantiate an object of class TFoo, you'd call TFoo.Create, not TFooClass.Create.

If you want to take advantage of Object Pascal's unique polymorphism and instantiate a descendant class of TFoo, you'd call MetaClassVariable.Create rather than TFooClass.Create, where MetaClassVariable is defined somewhere as "var MetaClassVariable: TFooClass;" and then set it accordingly before the instantiation.

To just call TFooClass.Create, and TFooClass is implicitly converted to TFoo, feels a bit 'off' and is asking for trouble, while seeing "TFooClass.Create" in the code would be indictive of a bug in my opinion, since the programmer either meant "TFoo" or a variable of type TFooClass instead of "TFooClass" itself.

On 06/07/2025 15:17, Zoë Peterson via fpc-devel wrote:
I would personally call that unusual at best

What do you two expect this construct to do that you think the current behavior 
is wrong? It’sobviously correct and expected to me as a fundamental  part of 
Object Pascal’s polymorphism. Constructing an object from a class reference is 
the entire reason that constructors are virtual. It’s how things like 
TPicture.Graphic are implemented to create the correct image loading object.

Zoë Peterson
Scooter Software


_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel


--
This email has been checked for viruses by Avast antivirus software.
www.avast.com
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to