委托和事件的区别

委托和事件的区别

前言:在我们学习完委托和事件了,那我们需要想一想委托和事件到底有什么区别呢?如果不了解委托和事件的话请看我之前的博客.http://www.cnblogs.com/MoRanQianXiao/p/7767931.html%20http://www.cnblogs.com/MoRanQianXiao/p/7773911.html

首先我们先建立一个学习类,声明委托和事件。在这个类中有两个学习的方法。在构造函数中进行委托和事件的注册。并且写一个方法进行委托和事件的调用,我们在下面的类中委托和事件的注册和调用都没有什么区别。代码如下:

 

    /// <summary>
    /// 学习类
    /// </summary>
    public class Learn
    {

        //委托
        public Action actHandle;
        //事件
        public event Action eveEvent;

        /// <summary>
        /// 构造函数
        /// </summary>
        public Learn()
        {
            //委托的注册
            actHandle += Test1;
            actHandle += Test2;
            //事件的注册
            eveEvent += Test1;
            eveEvent += Test2;
        }

        public void Test1()
        {
            Console.WriteLine("Test1");
        }

        public void Test2()
        {
            Console.WriteLine("Test2");
        }

        /// <summary>
        /// 方法的调用  没有明显的区别
        /// </summary>
        public void CallMethod()
        {
            actHandle?.Invoke();
            eveEvent?.Invoke();
        }

    }

 


在下面的代码中,当我们在一个方法中进行委托的声明,而我们在方法的内部是不能声明局部的实例的。而且我们在下面的方法中当我们为一个方法传递参数的时候,我们可以把委托当作一个方法的参数来进行使用,而我们的事件不可以。

    /// <summary>
    /// 学习类
    /// </summary>
    public class Learn2
    {

        public void CallMathod2()
        {
            //定义委托的局部实例
            Action actHandle2 = Test1;
            actHandle2 += Test2;

            //视图定义事件局部实例??????------这是错误的!!!!

            //测试
            actHandle2.Invoke();

        }

        public void Test1()
        {
            Console.WriteLine("Test1");
        }

        public void Test2()
        {
            Console.WriteLine("Test2");
        }

        /// <summary>
        /// 把委托当作为一个方法的参数来使用
        /// </summary>
        /// <param name="actHandle"></param>
        public void Test3(Action actHandle)
        {
            actHandle?.Invoke();
        }

    }

总结:

1.委托可以声明为局部的变量,而事件只能作为类的一个成员(即字段)来使用。所以我们可以认为事件是委托的一个特殊的实例,即受限制的委托,不可以定义局部的事件实例(语法错误)。

2.委托可以作为方法的参数使用,而事件不可以。

 

转载于:https://www.cnblogs.com/MoRanQianXiao/p/7845699.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值