当您在.NET中订阅事件时,订阅将添加到多播委托.触发事件时,将按订阅顺序调用委托.
我想以某种方式覆盖订阅,以便订阅实际上以相反的顺序触发.可以这样做,怎么做?
我认为这样的事情可能就是我所需要的:
public event MyReversedEvent
{
add { /* magic! */ }
remove { /* magic! */ }
}
Run Code Online (Sandbox Code Playgroud)
SLa*_*aks 19
你不需要任何魔法; 你只需要反转添加.
写入delegate1 + delegate2返回一个新的委托,其中包含方法,delegate1后面跟着方法delegate2.
例如:
private EventHandler myReversedEventField;
public event EventHandler MyReversedEvent
{
add { myReversedEventField = value + myReversedEventField; }
remove { myReversedEventField -= value; }
}
Run Code Online (Sandbox Code Playgroud)
remove除非要删除该处理程序的最后一个匹配项而不是第一个匹配项,否则处理程序中不需要任何魔法.(如果两次添加相同的处理程序)
以下方法创建一个名为allInstances的多播委托,然后使用GetInvocationList允许以相反的顺序单独触发每个委托:
public static void InvokeInReverse()
{
MyDelegate myDelegateInstance1 = new MyDelegate(TestInvoke.Method1);
MyDelegate myDelegateInstance2 = new MyDelegate(TestInvoke.Method2);
MyDelegate myDelegateInstance3 = new MyDelegate(TestInvoke.Method3);
MyDelegate allInstances =
myDelegateInstance1 +
myDelegateInstance2 +
myDelegateInstance3;
Console.WriteLine("Fire delegates in reverse");
Delegate[] delegateList = allInstances.GetInvocationList();
for (int counter = delegateList.Length - 1; counter >= 0; counter--)
{
((MyDelegate)delegateList[counter])();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3019 次 |
| 最近记录: |