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

Reply via email to