• Net中事件的用法之二


    Net中事件的用法之二

    1.委托与事件的区别 

    事件对权限做了控制
      1.委托可以直接调用
      事件不可以直接调用
      2.委托允许外面直接赋值
      事件不允许外面直接赋值

    2.事件与委托的实例比较

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace MyEvent
    {
        //委托的声明
        public delegate void DoSometing();
       
        /// <summary>
        ///  委托与事件的关系
        ///  委托是一种类型
        ///  事件是委托的一个实例
        /// </summary>
        public class MyEvent
        {
            public DoSometing doSomethingDelegate;//委托的一个变量
            public event DoSometing doSomethingEvent;//一个事件,就是委托的一个变量,加上了event关键字
            //事件的使用
            public void InvokeEvent()
            {
                Console.WriteLine("------------InvokeEvent------------");
                if (doSomethingEvent != null)
                {
                    doSomethingEvent();
                }
            }
            public void InvokeDelegate()
            {
                Console.WriteLine("------------InvokeDelegate------------");
                if (doSomethingDelegate != null)
                {
                    doSomethingDelegate();
                }
            }
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace MyEvent
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("欢迎来到流星小子博客学习");
                MyEvent myEvent = new MyEvent();
                myEvent.doSomethingEvent += ShowSomething;//为事件实例化
                myEvent.doSomethingEvent += ShowSomething;//为事件实例化
                //事件不可以直接调用
                //myEvent.doSomethingEvent();
                //事件不允许外面直接赋值
                //myEvent.doSomethingEvent = ShowSomething;
                myEvent.doSomethingEvent += ShowSomething;//为事件实例化
                myEvent.doSomethingEvent += ShowSomething;//为事件实例化
                myEvent.doSomethingEvent -= ShowSomething;//为事件实例化
                myEvent.InvokeEvent();//触发事件
    
                myEvent.doSomethingDelegate += ShowSomething;
                myEvent.doSomethingDelegate += ShowSomething;
                myEvent.doSomethingDelegate += ShowSomething;
                //委托可以直接调用
                myEvent.doSomethingDelegate();
                //委托允许外面直接赋值
                myEvent.doSomethingDelegate = ShowSomething;
    
                myEvent.doSomethingDelegate += ShowSomething;
                myEvent.doSomethingDelegate -= ShowSomething;
                myEvent.InvokeDelegate();
                Console.Read();
            }
            private static void ShowSomething()
            {
                Console.WriteLine("ShowSomething");
            }
        }
    }
  • 相关阅读:
    Task.Delay() 和 Thread.Sleep() 区别
    task 如何终止线程
    旧版委托线程回忆
    c# 线程的优先级
    Java——Java泛型
    Java——Java面向对象
    Java——Java连接Jira,创建、修改、删除工单信息
    软件——Jira是什么
    Java——一文读懂Spring MVC执行流程
    Java——SSM整合所需的Maven配置文件
  • 原文地址:https://www.cnblogs.com/dongh/p/14768319.html
Copyright © 2020-2023  润新知