事件,代表vs行动
本文关键字:行动 vs 代表 事件 | 更新日期: 2023-09-27 18:10:14
我想知道下面的所有选项是否可行。我完全理解委托和事件的用法,但是Action似乎提供了语法糖,使它更容易(或者我错过了什么)?我已经测试了所有这些模式,它们都有效,但这并不意味着它们都是好的模式。
public delegate WorkCompleteDel(sting value);
public class MyClass{
//Are these all viable, safe options?
//ties the above delegate, pretty standard pattern
public event WorkCompleteDel WorkCompletedDelEvent;
//OR
//this seems to be the easiest but only supports
//on listner/subscriber. IF thats all you need, seems
//reasonble?
public Action<string> WorkCompleteHandler1 {get; set;}
//OR
//this is similar to the one below it but
//uses an action. Not sure if using he event keyword
//now gives me the ability to have multple subscibers
//(but I think it does due to multicast delegate class)
public event Action<string> WorkCompleteHandler1;
//OR
//another standard patthen
public event EventHandler<MyEventHandlerArgs> WorkCompleteHandler2
}
public class MyEventHandlerArgs: EventArgs
{
public string MyString {get; set}
}
Action<T>
只是使用委托的一种简单的通用方式。它等于delegate MyDelegate(T arg)
添加它是为了节省你的输入,它确实为读者节省了很多麻烦,当你试图弄清楚你的委托使用什么作为参数时。
event
关键字有特殊含义。它可以防止在类之外触发此委托。关于event
为什么重要以及何时使用(或不使用)的讨论,请参阅这个出色的答案。