in the following example The output is:
cls class is TFoo
TObj.create

where I would expect:
cls class is TFoo
TObj.create
TFoo.create

ie the TFoo.constructor is not called, is this normal/expected?, The 
documentation does clarify the situation: 
http://www.freepascal.org/docs-html/ref/refse31.html 

"Class reference types are used to create instances of a certain class, which 
is not yet known at compile time, but which is specified at run time. 
Essentially, a variable of a class reference type contains a pointer to the 
definition of the speficied class. This can be used to construct an instance of 
the class corresponding to the definition, or to check inheritance." 

Thanks.

Jesus Reyes A.

program test;
{$mode ObjFpc}{$H+}
type
  TObj = class
  public
    constructor create;
  end;
  TObjClass=class of TObj;

  TFoo = class(TObj)
  public
    constructor create;
  end;

constructor TObj.Create;
begin
  inherited create;
  WriteLn('TObj.create');
end;

constructor TFoo.create;
begin
  inherited Create;
  WriteLn('TFoo.Create');
end;

var
  cls: TObjClass;
  obj: TObj;
begin
  cls := TFoo;
  WriteLn('cls class is ',cls.ClassName);
  Obj := cls.Create;
  Obj.Free;
end.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to