1.什么是事件
事件 - 事件的发布者和事件的订阅者。
2.c#如何定义事件
与定义类的成员非常类似,及需要包含一个 event关键字即可。
访问修饰符 event 委托类型 事件名;
3.如何订阅和取消事件
//使用.NET类库中预定义的委托类型EventHandler来定义事件
//EventHandler用于处理不包含事件数据的事件
// public delegate void EventHandler(object sender, EventArgs e);
参数1 负责保存对触发事件的引用。
参数2 负责保存事件的数据。
namespace c_sharp_learing
{
class Program
{
public event EventHandler marryEvent;
public void OnMarryComing( string msg)
{
if(marryEvent != null)
{
marryEvent(this,new EventArgs());
}
}
static void Main(string[] args)
{
Program program = new Program();
Friend a = new Friend("小张");
Friend b = new Friend("小李");
Friend c = new Friend("小王");
program.marryEvent += new EventHandler(a.SendMessage);
program.marryEvent += new EventHandler(b.SendMessage);
program.OnMarryComing("我结婚了呀 ");
program.marryEvent -= new EventHandler(a.SendMessage);
program.marryEvent -=new EventHandler(b.SendMessage);
program.marryEvent += new EventHandler(c.SendMessage);
program.OnMarryComing("我结婚了呀 小王");
Console.ReadKey();
}
}
}
public class Friend
{
public string name_;
public Friend(string name)
{
name_ = name;
}
//事件处理函数
public void SendMessage(object s, EventArgs e)
{
Console.WriteLine(name_ + " receive ");
}
}
4.扩展的Eventagrs类
如果想在事件中包含事件的数据,可以通过派生EventArgs来实现。
5.本质
事件的本质-- 特殊的多路广播委托。