108 lines
1.8 KiB
ObjectPascal
108 lines
1.8 KiB
ObjectPascal
type
|
|
TProc = procedure(sender: object);
|
|
TProc2 = procedure;
|
|
|
|
var
|
|
i: integer;
|
|
|
|
type
|
|
IInt = interface
|
|
event OnClick: System.EventHandler;
|
|
end;
|
|
|
|
TClass1 = class
|
|
event OnClick: procedure(sender: object);
|
|
class event OnClick_s: TProc2;
|
|
|
|
procedure MyProc(sender: object);
|
|
begin
|
|
i := 9;
|
|
end;
|
|
|
|
constructor Create;
|
|
begin
|
|
OnClick += MyProc;
|
|
OnClick(self);
|
|
assert(i = 9);
|
|
OnClick -= MyProc;
|
|
end;
|
|
|
|
procedure RaiseMethod;
|
|
begin
|
|
if OnClick <> nil then
|
|
OnClick(self);
|
|
end;
|
|
|
|
class procedure RaiseMethod2;
|
|
begin
|
|
OnClick_s;
|
|
end;
|
|
end;
|
|
|
|
TClass2 = class(IInt)
|
|
event OnClick: System.EventHandler;//procedure(sender: object);
|
|
class event OnClick_s: TProc2;
|
|
|
|
procedure MyProc(sender: object; ev: System.EventArgs);
|
|
begin
|
|
i := 9;
|
|
end;
|
|
|
|
constructor Create;
|
|
begin
|
|
OnClick += MyProc;
|
|
OnClick(self, nil);
|
|
assert(i = 9);
|
|
OnClick -= MyProc;
|
|
end;
|
|
|
|
procedure RaiseMethod;
|
|
begin
|
|
if OnClick <> nil then
|
|
OnClick(self, nil);
|
|
end;
|
|
|
|
class procedure RaiseMethod2;
|
|
begin
|
|
OnClick_s;
|
|
end;
|
|
end;
|
|
|
|
procedure MyProc(sender: object);
|
|
begin
|
|
i := 8;
|
|
end;
|
|
|
|
procedure MyProc(sender: object; ev: System.EventArgs);
|
|
begin
|
|
i := 8;
|
|
end;
|
|
|
|
procedure MyProc2;
|
|
begin
|
|
i := 7;
|
|
end;
|
|
|
|
var
|
|
t: TClass1;
|
|
t2: TClass2;
|
|
p: procedure (sender: object);
|
|
|
|
begin
|
|
t := new TClass1;
|
|
t.OnClick += MyProc;
|
|
t.RaiseMethod;
|
|
assert(i = 8);
|
|
TClass1.OnClick_s += MyProc2;
|
|
TClass1.RaiseMethod2;
|
|
assert(i = 7);
|
|
|
|
i := 0;
|
|
t2 := new TClass2;
|
|
t2.OnClick += MyProc;
|
|
t2.RaiseMethod;
|
|
assert(i = 8);
|
|
TClass2.OnClick_s += MyProc2;
|
|
TClass2.RaiseMethod2;
|
|
assert(i = 7);
|
|
end. |