zoukankan      html  css  js  c++  java
  • 委托和事件的区别

    委托和事件的区别

    前言:在我们学习完委托和事件了,那我们需要想一想委托和事件到底有什么区别呢?如果不了解委托和事件的话请看我之前的博客.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.委托可以作为方法的参数使用,而事件不可以。

  • 相关阅读:
    202002知识点
    爬取思想流程
    测试
    运维
    设计模式重温
    ?March2020疑问点
    最方便简洁的设置Sublime编辑预览MarkDown
    rime中州韵输入法安装及配置
    Deepin更新Sublime并取消更新提示
    关于在线教学软件一些发现和思考
  • 原文地址:https://www.cnblogs.com/MoRanQianXiao/p/7845699.html
Copyright © 2011-2022 走看看