以前的时候,事件这个东西虽然说是经常用,但是没有真正意义上去理解它,为什么要用事件,事件有什么好处,明明可以直接用方法实现为什么还要去用事件,说到底,事件就是触发一个场景之后,实现的一些内容。
用事件的目的,它是为了降低耦合,扩展性强,这个东西如果是在业务简单项目里面,它是比较难看出来优点的,如果复杂了,那它的优势就很明显,很容易看出来。
/// <summary>
/// delegate
/// </summary>
/// <returns></returns>
public delegate void ThiefBreakVaseEventHanler();
/// <summary>
/// event
/// </summary>
public static event ThiefBreakVaseEventHanler ThiefBreakVase;
static void Main(string[] args)
{
Console.WriteLine("小偷打碎了花瓶,触发了事件");
Console.WriteLine("猫狗听到了声音,于是");
//Subscription events
ThiefBreakVase += Cat_ThiefBreakVase;
ThiefBreakVase += Dog_ThiefBreakVase;
Cause();
}
/// <summary>
/// Trigger events
/// </summary>
private static void Cause()
{
//start event
ThiefBreakVase?.Invoke();
}
private static void Cat_ThiefBreakVase()
{
new Cat().call();
}
private static void Dog_ThiefBreakVase()
{
new Dog().call();
}
}
public class Cat : IAnimal
{
public void call()
{
Console.WriteLine("喵喵喵!");
}
}
public class Dog : IAnimal
{
public void call()
{
Console.WriteLine("汪汪汪!");
}
}
具体的好处从这个事件就可以看出来,现在可以在事件中添加想要的方法,那么这个方法是在触发的时候调用的,可以在预先写好的代码中,补充触发之后应该做的事情。
不用去修改系统源码,就可以实现对这个事件的功能的补充,这就是解耦。
如果行为是固定的,就是想在事件触发之后去执行固定方法,不需要扩展,那么通过自定义事件来实现其实没太大必要,除非考虑到觉得你需要给其他人留条路,提供给别人来使用,那么这个解耦就是有用的。
自定义事件适合那些需要开放出来的事件,例如系统将click等事件触发时机开发给我们,我们就可以根据我们的需要,在这些事件中做我们想做的事情。而不需要预先告诉系统,我应该在click事件中做什么事情。
当然解耦自然会增加性能消耗,所以使用的时候应该考虑是不是一个需要开放事件,如果是就有解耦,如果不是,就不需要。
代码是最低级的东西,要去在思维上理解,知道什么时候使用,为什么这么用,好处,优势,才能更好的去运用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)