|
1 | 1 | -------------------ModuleInfo------------------- |
2 | 2 | --- Author : jx |
3 | 3 | --- Date : 2020/02/15 23:58 |
4 | | ---- Description : 委托(函数指针封装) |
| 4 | +--- Description : 委托 |
5 | 5 | ------------------------------------------------ |
6 | 6 | ---@class SysLib.Delegate : SysLib.Object |
7 | | ----@field New fun(obj, methodPointer):SysLib.Delegate |
8 | | -local Delegate = class.extends("SysLib.Delegate", SysLib.Object) |
| 7 | +---@field New fun(target, method):SysLib.Delegate |
| 8 | +local Delegate, base = class.extends("SysLib.Delegate", SysLib.Object) |
9 | 9 |
|
10 | | -function Delegate:constructor(obj, methodPointer) |
11 | | - self.multiDelegate = SysLib.Collections.List.New() |
12 | | - if methodPointer == nil then |
13 | | - methodPointer = obj |
14 | | - obj = nil |
15 | | - end |
16 | | - if methodPointer then |
17 | | - self:Add(obj, methodPointer) |
18 | | - end |
19 | | -end |
20 | | - |
21 | | ----@overload fun(funcPointer:function) |
22 | | -function Delegate:Add(obj, methodPointer) |
23 | | - local struct = { |
24 | | - target = obj, |
25 | | - methodPointer = methodPointer |
26 | | - } |
27 | | - self.multiDelegate:Add(struct) |
| 10 | +function Delegate:constructor(target, method) |
| 11 | + self.target = target |
| 12 | + self.method = method |
28 | 13 | end |
29 | 14 |
|
30 | | -function Delegate:Remove(obj, methodPointer) |
31 | | - --multi |
32 | | - for index, value in ipairs(self.multiDelegate) do |
33 | | - if value.target == obj and v.methodPointer == methodPointer then |
34 | | - self.multiDelegate:RemoveAt(index) |
35 | | - break |
36 | | - end |
| 15 | +function Delegate:Invoke(...) |
| 16 | + if self.target ~= nil then |
| 17 | + --instance |
| 18 | + self.method(self.target, ...) |
| 19 | + else |
| 20 | + --static |
| 21 | + self.method(...) |
37 | 22 | end |
38 | 23 | end |
39 | 24 |
|
40 | | -function Delegate:RemoveAll() |
41 | | - self.multiDelegate:Clear() |
42 | | -end |
43 | | -function Delegate:Invoke(...) |
44 | | - for index, v in ipairs(self.multiDelegate) do |
45 | | - if v.target ~= nil then |
46 | | - --instance |
47 | | - v.methodPointer(v.target, ...) |
48 | | - else |
49 | | - --static |
50 | | - v.methodPointer(...) |
51 | | - end |
52 | | - end |
| 25 | +function Delegate:Equals(target) |
| 26 | + return self.target == target.target and self.method == target.method |
53 | 27 | end |
54 | 28 |
|
55 | 29 | return Delegate |
0 commit comments