[fpc-pascal] Problem accessing Class Method with abstraction
Andrew Hall
andrew.hall at shaw.ca
Mon Oct 18 04:38:05 CEST 2010
The reason you cannot call VerifyID's from coGeneric is that the compiler sees coGeneric as a TPersistentClass which does not implement the VerifyIDs method. The following changes will give you the desired result...
type
TCoreObjectClass = class of TCoreObject;
If (coGeneric<>nil) and coGeneric.InheritsFrom(TCoreObject) then
TCoreObjectClass(coGeneric).VerifyIDs(Module);
Regards Andrew.
On 17 Oct 10, at 06:38 , Andrew Brunner wrote:
> procedure VerifyIDs(Var Module:TDBMSModule);
> var
> iLcv:integer;
> ItemP:PCoreObjectItem;
> coGeneric:TPersistentClass;
> coItem:TCoreObject;
> begin
> for iLcv:=0 to High(CoreObjectItems) do begin
> ItemP:=CoreObjectItems[iLcv];
> coGeneric:=GetClass(ItemP^.ClassName);
> if (coGeneric<>nil) and coGeneric.InheritsFrom(TCoreObject) then begin
> coItem:=coGeneric.Create as TCoreObject;
> Try
> coItem.VerifyIDs(Module);
> finally
> FreeAndNil(coItem);
> end;
> end;
> end;
> end;
>
> This code works as expected but why do I need to create an instance of
> the object if I just want to reference it's class procedure of
> VerifyIDs?
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
More information about the fpc-pascal
mailing list