Ссылка на метод может быть разбита на две части: указатель на объект и указатель на сам метод. В единице System
определен удобный тип записи, называемый TMethod
, который позволяет нам делать это в разбивке.
С этим знанием мы можем написать что-то вроде этого:
function SameMethod(AMethod1, AMethod2: TNotifyEvent): boolean;
begin
result := (TMethod(AMethod1).Code = TMethod(AMethod2).Code)
and (TMethod(AMethod1).Data = TMethod(AMethod2).Data);
end;
Надеюсь, это поможет. :)
Редактировать : просто изложить в лучшем формате проблему, которую я пытаюсь решить здесь (как указано в комментариях).
Если у вас есть две формы, обе из одного и того же базового класса:
Form1 := TMyForm.Create(nil);
Form2 := TMyForm.Create(nil);
и вы назначаете один и тот же метод из этих форм двум кнопкам:
Button1.OnClick := Form1.ButtonClick;
Button2.OnClick := Form2.ButtonClick;
И сравните два свойства OnClick
, вы обнаружите, что Code
то же самое, но Data
отличается. Это потому, что это один и тот же метод, но в двух разных экземплярах класса ...
Теперь, если у вас есть два метода для одного и того же объекта:
Form1 := TMyForm.Create(nil);
Button1.OnClick := Form1.ButtonClick1;
Button2.OnClick := Form1.ButtonClick2;
Тогда их Data
будут такими же, но их Code
будут другими.