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