Marco van de Voort wrote:
In our previous episode, Mark Morgan Lloyd said:

That logical, since the constructors are not an virtual; and override; pair.
I find that if I explicitly decorate TB5500BaseUnit.Create() as virtual and TB5500SPOUnit.Create() as override then TB5500SPOUnit.Create() is called correctly.

That's the normal way.

I didn't think this was necessary,

_why_ did you think this?

In part, because the documentation on method declarations at http://www.freepascal.org/docs-html/ref/refsu25.html#x66-730005.5.1 explicitly allows a virtual method directive, but the documentation on constructor declarations at http://www.freepascal.org/docs-html/ref/refse28.html#x64-710005.4 explicitly does not allow it.

but on reflection I assume that it's because u is declared as a TB5500BaseUnit: the variable's compile-time rather than run-time class is being used for the constructor unless explicitly overridden.

In theory this kind of information could propagate in simple cases, but then
behaviour would differ between cases where this information could be
propagated (a deeper version called), and not (base version called).

--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to