Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在一行代码中订阅多个方法_C#_Delegates - Fatal编程技术网

C# 在一行代码中订阅多个方法

C# 在一行代码中订阅多个方法,c#,delegates,C#,Delegates,鉴于: 我如何定义适当的结构以允许: btn1.MouseDown += someMethod1; btn1.MouseDown += someMethod2; btn1.MouseDown += someMethod3; 通常要做的事情是拥有一组方法,并对它们进行迭代: btn1.MouseDown += someMethods; 如果您想使用List.ForAll()而不是foreach将其转换为一行,通常需要有一组方法,并对它们进行迭代: btn1.MouseDown += someM

鉴于:

我如何定义适当的结构以允许:

btn1.MouseDown += someMethod1;
btn1.MouseDown += someMethod2;
btn1.MouseDown += someMethod3;

通常要做的事情是拥有一组方法,并对它们进行迭代:

btn1.MouseDown += someMethods;

如果您想使用
List.ForAll()
而不是
foreach
将其转换为一行,通常需要有一组方法,并对它们进行迭代:

btn1.MouseDown += someMethods;

可以使用
List.ForAll()
将其转换为一行,如果要使用该行而不是
foreach
,则可以使用
委托。组合
创建一个委托。类似这样的情况(可能具有不同的委托类型):


您可以使用
Delegate.combined
创建单个委托。类似这样的情况(可能具有不同的委托类型):


这可能只是一种简单的方法,但您可以这样做:

EventHandler handler = (EventHandler)Delegate.Combine((EventHandler)someMethod1,
                                                      (EventHandler)someMethod2,
                                                      (EventHandler)someMethod3);
SomeEvent += handler;

这可能只是一种简单的方法,但您可以这样做:

EventHandler handler = (EventHandler)Delegate.Combine((EventHandler)someMethod1,
                                                      (EventHandler)someMethod2,
                                                      (EventHandler)someMethod3);
SomeEvent += handler;

可以使用delegate.combine或仅使用“+”运算符链接多个代理

EventHandler someMethods = someMethod1;

someMethods += someMethod2;
someMethods += someMethod3;

btn1.MouseDown += someMethods;

两者基本相同。

您可以使用delegate.combine或仅使用“+”运算符链接多个委托

EventHandler someMethods = someMethod1;

someMethods += someMethod2;
someMethods += someMethod3;

btn1.MouseDown += someMethods;

两者本质上是相同的。

。看起来,如果您只是将第一个强制转换为EventHandler,其余的将自动强制转换:
btn1.MouseDown+=(EventHandler)someMethod1+someMethod2+someMethod3巧妙的技巧。看起来,如果您只是将第一个强制转换为EventHandler,其余的将自动强制转换:
btn1.MouseDown+=(EventHandler)someMethod1+someMethod2+someMethod3工作完美。谢谢,做得很好。谢谢