C#的事件其实是一个特殊的多播委托,只是加了event关键字来修饰。 在外部访问事件的时候要用+=的形式添加事件,比用=号安全。 1.新建一个C#控制台项目

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Event
{
class Program
{
//定义委托,注意返回值类型和参数列表类型要与事件所要处理的函数类型相同
public delegate void SendMessagerDelegate(string str);

    //定义事件,给委托只是增加了一个event关键字就变成了事件
    public event SendMessagerDelegate sendMessageDel;

    //发出事件
    public void EventComing(string str)
    {
        if(sendMessageDel!=null)
        {
            sendMessageDel(str);
        }
    }
    static void Main(string\[\] args)
    {
        Program pro = new Program();

        Student stu01 = new Student("老王");
        Student stu02 = new Student("老李");
        Student stu03 = new Student("老张");

        //使用+=来订阅事件
        pro.sendMessageDel += stu01.Message;
        pro.sendMessageDel += stu02.Message;

        //发出通知
        pro.EventComing("我是武校长,请同学们9月1号准时到达学校");
        Console.WriteLine("-------------------------------------");
        Console.WriteLine("-------------------------------------");

        //取消老李的订阅事件,老李将无法接到通知
        pro.sendMessageDel -= stu02.Message;

        //增加老张订阅事件
        pro.sendMessageDel += stu03.Message;

        //发出通知
        pro.EventComing("我是武校长,请同学们9月1号准时到达学校");
        Console.ReadKey();
    }
}

class Student
{
    public string Name;

    //构造函数
    public Student(string name)
    {
        Name = name;
    }

    //事件要处理的函数,注意要符合SendMessagerDelegate委托的定义
    public void Message(string str)
    {
        //输出收到的通知消息
        Console.WriteLine(str);

        //对通知消息作出回应,即对事件做出处理
        Console.WriteLine(this.Name + "收到消息,我会准时到达学校");
    }

}

}

结果如下: [

](http://www.wjgbaby.com/wp-content/uploads/2017/08/17081601-300x137.jpg)
](http://www.wjgbaby.com/wp-content/uploads/2017/08/17081601-300x137.jpg)