[fpc-pascal] Classes and class methods

Marco van de Voort marcov at stack.nl
Wed Feb 9 12:21:20 CET 2011


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.



More information about the fpc-pascal mailing list