object pascal - How to get a pointer to a method in a base class from a child class in Delphi? -
here code example:
type tmybaseclass = class public procedure someproc; virtual; end; tmychildclass = class(tmybaseclass) public procedure someproc; override; end; var somedelegate: procedure of object; procedure tmybaseclass.someproc; begin showmessage('base proc'); end; procedure tmychildclass.someproc; begin showmessage('child proc'); // here want pointer tmybaseclass.someproc (not in class!): somedelegate := someproc; end; procedure tform1.button1click(sender: tobject); begin tmychildclass.create try // there "child proc" message: someproc; free; end; // there want "base proc" message, "child proc" again // (but destroyed anyway, how coud be?): somedelegate; end;
the 1 way know is:
procedure tmychildclass.basesomeproc; begin inherited someproc; end; procedure tmychildclass.someproc; begin showmessage('child proc'); somedelegate := basesomeproc; end;
the 2nd change someproc
declaration override
reintroduce
:
tmychildclass = class(tmybaseclass) public procedure someproc; reintroduce; end;
and cast self
tmybaseclass
(do not use as
cast):
somedelegate := tmybaseclass(self).someproc;
also note code give access violation because call somedelegate
on freed object.
Comments
Post a Comment