【C#补全计划】事件

一、事件的概念

  1. 事件是基于委托的存在,是委托的安全包裹,让委托的使用更具有安全性

  2. 事件是一种特殊的变量类型

二、事件的使用

  1. 语法:event 委托类型 事件名;

  2. 使用:

(1)事件是作为成员变量存在与类中

(2)委托怎么用,事件就怎么用

  1. 事件与委托的区别:事件不能在类外部赋值和调用

  2. 只能作为成员变量存在与类和接口以及结构体中

  3. 代码:

cs 复制代码
using System;

namespace Event
{
    class Program
    {
        static void Main(string[] args)
        {
            Test test = new Test();
            
            // 委托可以在外部赋值
            test.action = fun;
            test.action += fun;
            test.action -= fun;
            // 事件不能在外部赋值
            // test.myEvent = fun(); 编译报错:事件不能在外部赋值
            test.myEvent += fun; // 但是可以添加、移除函数
            test.myEvent -= fun;
            
            // 委托可以在外部调用
            test.action.Invoke();
            // 事件不能在外部调用
            // test.myEvent.Invoke(); 编译报错:事件不能在外部调用
            test.doEvent(); // 但是可以在内部封装调用
        }

        static void fun()
        {
            Console.WriteLine("调用fun()");
        }
    }

    class Test
    {
        // 创建委托成员变量,用于存储函数
        public Action action;

        // 创建事件成员变量,用于存储函数
        public event Action myEvent;

        public void doEvent()
        {
            Console.WriteLine("调用doEvent()");
            if(myEvent != null)
                myEvent.Invoke();
        }
    }
}

运行结果如下:

三、事件的作用

  1. 防止外部随意置空委托

  2. 防止外部随意调用委托

  3. 事件相当于对委托进行了一次封装,使其更加安全