Delphi 中的事件实际上是一个 TMethod 类型的双指针结构体,但是 Delphi 并没有提供简单的写法,如:
if OnClick=Button1Click then
这么写看起来是完美的,但是却是无法编译通过的。所以,我们提供一个额外的模板类来做这个事情:
type
TEventComparer<T>=class
public
class function Equals(M1,M2:T):Boolean;
end;
{ TEventComparer<T> }
class function TEventComparer<T>.Equals(M1, M2: T): Boolean;
var
V1:TMethod absolute M1;
V2:TMethod absolute M2;
begin
Result:=(V1.Code=V2.Code) and (V1.Data=V2.Data);
end;然后我们要比较时,只需写成 TEventComparer<事件类型>.Equals(事件1,事件2)就可以了,如这样:
if TEventComparer<TNotifyEvent>.Equals(OnClick,Button1Click) then ...
好吧,看起来麻烦了一点,在官方改进编译器以支持前面的写法之前,这算是一个折中吧。
