C#中的事件
2021-06-15 20:03
标签:write friend 消息 引用 class 发布者 mes 触发事件 rri 事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些出现,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。事件是用于进程间通信。 C#中事件是一个特殊的多路广播委托,事件默认含有一个私有的委托变量,该变量用于保存对事件处理方法的引用,且该委托类型的变量为私有,只能从定义该事件的类中进行访问 C#中的事件 标签:write friend 消息 引用 class 发布者 mes 触发事件 rri 原文地址:https://www.cnblogs.com/youMo/p/10360411.html什么是事件
使用事件
event
关键字访问修饰符 event 委托类型 事件名;
//新郎官类,充当事件发布者角色
class Bridegroom
{
//自定义委托
public delegate void MarryHandler(string msg);
//使用自定义委托类型定义事件,事件名为MarrEvent
public event MarryHandler MarrayEvent;
//发出事件
public void OnMarriageComing(string msg)
{
//判断是否绑定了事件处理方法
if (MarrayEvent!=null)
{
//触发事件
MarrayEvent(msg);
}
}
static void Main(string[] args)
{
//初始化新郎官对象
Bridegroom bridegroom = new Bridegroom();
//实例化朋友对象
Friend friend1 = new Friend("张三");
Friend friend2 = new Friend("李四");
Friend friend3 = new Friend("王五");
//使用"+="订阅消息
bridegroom.MarrayEvent += new MarryHandler(friend1.SendMessage);
bridegroom.MarrayEvent += new MarryHandler(friend2.SendMessage);
//使用"-="取消消息
bridegroom.MarrayEvent -= new MarryHandler(friend2.SendMessage);
//发出通知
bridegroom.OnMarriageComing("到时来参见婚礼!");
Console.ReadLine();
//输出结果为
//到时来参加婚礼!
//张三收到了,到时候来参加
}
//朋友类
public class Friend
{
//字段
public string Name;
//构造函数
public Friend(string name )
{
Name = name;
}
//事件处理函数,该函数符合MarryHandler委托的定义
public void SendMessage(string mssage)
{
//输出通知消息
Console.WriteLine(mssage);
//对事件做出处理
Console.WriteLine(this.Name+"收到了,到时候来参加");
}
}
}
EventHandler
系统委托类定义public delegate void EventHandler(Object sender,EventArgs e);
sender
负责保存对触发事件对象的引用,其类型为Object
e
负责保存事件数据,EventArgs
也是.NET
类库中定义的类,它不保存任何数据
EventHandler
只用于处理不包含事件数据的事件.如果我们想要在由这种方式定义的事件中包含事件数据,则可以通过派生EventArgs
类来实现namespace MyEvent
{
//自定义事件类,并使其带有事件数据
public class MarryEventArgs:EventArgs
{
public string Message;
public MarryEventArgs(string msg)
{
Message = msg;
}
}
//新郎官类,充当事件发布者角色
class Bridegroom
{
//自定义委托
public delegate void MarryHandler(object sender,MarryEventArgs e);
//使用自定义委托类型定义事件,事件名为MarrEvent
public event MarryHandler MarrayEvent;
//发出事件
public void OnMarriageComing(string msg)
{
//判断是否绑定了事件处理方法
if (MarrayEvent != null)
{
//触发事件
MarrayEvent(this,new MarryEventArgs(msg));
}
}
static void Main(string[] args)
{
//初始化新郎官对象
Bridegroom bridegroom = new Bridegroom();
//实例化朋友对象
Friend friend1 = new Friend("张三");
Friend friend2 = new Friend("李四");
Friend friend3 = new Friend("王五");
//使用"+="订阅消息
bridegroom.MarrayEvent += new MarryHandler(friend1.SendMessage);
bridegroom.MarrayEvent += new MarryHandler(friend2.SendMessage);
//使用"-="取消消息
bridegroom.MarrayEvent -= new MarryHandler(friend2.SendMessage);
//发出通知
bridegroom.OnMarriageComing("到时来参见婚礼!");
Console.ReadLine();
//输出结果为
//到时来参加婚礼!
//张三收到了,到时候来参加
}
//朋友类
public class Friend
{
//字段
public string Name;
//构造函数
public Friend(string name)
{
Name = name;
}
//事件处理函数,该函数符合MarryHandler委托的定义
public void SendMessage(object s,MarryEventArgs e)
{
//输出通知消息
Console.WriteLine(e.Message);
//对事件做出处理
Console.WriteLine(this.Name + "收到了,到时候来参加");
}
}
}
}
事件的本质