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代码>工作完美。谢谢,做得很好。谢谢