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 + "收到消息,我会准时到达学校");
}
}
}
结果如下: [