Voici mon exemple de code:Comment faire pour obtenir un pointeur vers une méthode dans une classe de base à partir d'une classe enfant dans Delphi?
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 i want to get a pointer to TMyBaseClass.SomeProc (NOT IN THIS CLASS!):
SomeDelegate := SomeProc;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TMyChildClass.Create do
try
// there will be "Child proc" message:
SomeProc;
finally
Free;
end;
// there i want to get "Base proc" message, but i get "Child proc" again
// (but it is destroyed anyway, how coud it be?):
SomeDelegate;
end;
Merci! La vôtre 1ère méthode est exacte ce que je veux =) – SomeOne
S'il vous plaît faites attention à ce que Michal Niklas a dit à propos de la violation d'accès. Vous en aurez toujours un, même avec "hérité". C'est parce que vous ne pouvez pas avoir un pointeur vers une méthode d'une classe (à moins qu'il ne soit déclaré comme "procédure de classe"), seulement à une méthode d'un objet. Votre objet est détruit lorsque vous appelez Free(), et toutes les références, y compris SomeDelegate qui contient une référence à sa fonction, ne sont plus valides. – himself
Lorsque j'ai essayé le code avec mon Turbo Delphi, j'ai eu une exception de violation d'accès. –