event作用
我们可以通过对event
的使用完成回调功能。本节通过简单的例子引入Action
和EventHandler
。
EventHandler
class Program
{
private static event EventHandler<DiagnosticsArgs> DiagnosticsEvent;
static void Main(string[] args)
{
DiagnosticsEvent += Program_DiagnosticsEvent;
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
DiagnosticsEvent?.Invoke(null, new DiagnosticsArgs(100, false));
}
Thread.Sleep(500);
}
}
private static void Program_DiagnosticsEvent(object sender, DiagnosticsArgs e)
{
Console.WriteLine(e.FirstParamater + "\n" + e.SecondParameter);
}
}
internal class DiagnosticsArgs : EventArgs
{
private int _firstParamater;
public int FirstParamater
{
get { return _firstParamater; }
set { _firstParamater = value; }
}
private bool _secondParameter;
public bool SecondParameter
{
get { return _secondParameter; }
set { _secondParameter = value; }
}
public DiagnosticsArgs(int first, bool second)
{
FirstParamater = first;
SecondParameter = second;
}
}
结果:
Action
class Program
{
private static event Action<DiagnosticsArgs> DiagnosticsEvent;
static void Main(string[] args)
{
DiagnosticsEvent += Program_DiagnosticsEvent;
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
DiagnosticsEvent?.Invoke(new DiagnosticsArgs(100, false));
}
Thread.Sleep(500);
}
}
private static void Program_DiagnosticsEvent(DiagnosticsArgs e)
{
Console.WriteLine(e.FirstParamater + "\n" + e.SecondParameter);
}
}
internal class DiagnosticsArgs : EventArgs
{
private int _firstParamater;
public int FirstParamater
{
get { return _firstParamater; }
set { _firstParamater = value; }
}
private bool _secondParameter;
public bool SecondParameter
{
get { return _secondParameter; }
set { _secondParameter = value; }
}
public DiagnosticsArgs(int first, bool second)
{
FirstParamater = first;
SecondParameter = second;
}
}
运行结果和上一次相同。
结论
单从功能上来讲,二者都可以实现函数回调,但是从设计模式的角度来看,EventHandler
的封装性似乎更好,具体可参考StackOverflow相关讨论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)