事件说白了就是委托,一种特殊的委托。
事件我们可以理解成:消费者向服务者提出服务的方式,然后服务者根据消费者提出的方式去执行服务,比如餐馆与食客。
建立事件的要素:
1.声明一个委托(饭店经营的执照):
public delegate void myDelegate(Custom sender);
2.定义一个提供事件服务的类,里面包含了事件的定义、调用事件执行的方法,当然也可以包含事件委托。
2.1声明一个改委托类型的事件(饭店里的厨子):
public event myDelegate myEvent;
2.2 定义事件执行的方法(厨子做饭)
public void Run(object sender)
{
myServer(sender);
}
3.定义一个使用时间的消费者类,里面包含了 将事件和消费事件方法绑定、消费事件方法的定义
3.1 自身的事件方法和服务类事件挂钩(厨子和执照的对应,没有执照不让开厨子做生意):
public void Customer(Server se)
{
se.myServer+=new Server.myDelegate(this.myCus);
}
3.2消费事件方法(客人提出自己想吃什么,这饭怎么做)
public void myCus(object cs)
{
Console.WriteLine(cs.ToString()+“是消费事件方法”);
}
4主函数中对事件本身触发的使用(主函数相当于饭馆的饭桌):
4.1调用Customer方法(客人来了提出自己想吃什么)
4.2.调用服务类事件执行方法(厨师去按照客人的吩咐做饭)
总览:
class Server
{
public delegate void myDelegate(object sender);
public event myDelegate myServer;
public void Run(object sender)
{
myServer(sender);
}
}
class Custom
{
public void Customer(Server se)
{
se.myServer+=new Server.myDelegate(this.myCus);
}
public void myCus(object cs)
{
Console.WriteLine(cs.ToString()+"是消费事件方法");
}
}
public class Event
{
static void Main()
{
Server server = new Server();
Customer cs = new Customer();
cs.Customer(server);
server.Run(new Event());
Console.ReadKey();
}
}
一些扩展:
1.在以上的代码中的
server.Run(new Event())
new Event() 这个参数可以变换,因为当初设定服务类中事件运行方法和委托的时候参数是 object类型,所以这里可以是各种对象。这就使委托变得形式多样化。
2.声明委托的时候,也可以独立在类之外,但是参数类型就只能是object,而不是前面提到的Custom,因为委托面向的范围层级不一样。限定具体类类型的委托需包含于类中