Marco van de Voort wrote:
In our previous episode, Mark Morgan Lloyd said:
Is it possible to put a class (not an instance) in a variable or array
element, and to use this to call a class method?
I'm defining a hierarchy of classes and it would be convenient if it
were possible to register the fact that a class had a particular
subclass, such that the information was available before instantiation.
I'm assuming that the code that inspects the array has imported all
units so is aware of the relevant class declarations, but I am still
having problems with calling class methods and/or casting to a class (as
distinct from an instance).
Afaik this route you can only call static methods of the basetype of the
class-type.
So if it is
A= class
end;
b=class(a)
end;
c=class(b);
TClasstype = class of B;
var x : TClasstype;
begin
x:=C;
x.staticmethod
then staticmethod must be visible in B. It doesn't matter which descendant
of B you assign to X.
This is logical, since static methods are entirely compiletime, and the
compiler can't know what type will be runtime assigned.
Thanks Marco, I was beginning to suspect that I was hitting limitations
and that what I was trying to do might be ill-advised.
I'm finding virtual class methods useful when I'm able to refer directly
to a class, rather than going via a reference to a class.
--
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/mailman/listinfo/fpc-pascal