关于事件的理解

以前的时候,事件这个东西虽然说是经常用,但是没有真正意义上去理解它,为什么要用事件,事件有什么好处,明明可以直接用方法实现为什么还要去用事件,说到底,事件就是触发一个场景之后,实现的一些内容。

用事件的目的,它是为了降低耦合,扩展性强,这个东西如果是在业务简单项目里面,它是比较难看出来优点的,如果复杂了,那它的优势就很明显,很容易看出来。

 /// <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事件中做什么事情。

当然解耦自然会增加性能消耗,所以使用的时候应该考虑是不是一个需要开放事件,如果是就有解耦,如果不是,就不需要。

代码是最低级的东西,要去在思维上理解,知道什么时候使用,为什么这么用,好处,优势,才能更好的去运用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值