在C#里面 事件就是类在发生它关注的事情时用来提供通知的一种方式,
所有的事件都依托于委托因为声明一个事件必须为其声明委托类型,它是由委托来进行激活的.
如声明一个事件
public delegate void Mydelegate();//声明事件委托类型 ;
public event Mydelegate Myevent;//声明事件;
一般在声明事件的类中要包含触发事件的方法,因为创建事件的类就相当于出版社,而它的一个事件就相当于它具体要出版哪一本书,
而触发事件就是出版社要在什么时候出版这本书.而此书的订阅者则是此事件的事件处理对象,具体的事件处理程序则需要订阅者自己定义;
如以下程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication4
{
public delegate void Mydelegate();
class publish
{
public event Mydelegate myevent;
public void issue()//定义类调用触发事件的方法;
{
if(myevent!=null)
myevent();//触发事件;
}
}
class Order
{
private string productnName;
private int productID;
public Order(string name,int id)
{
this.productnName = name;
this.productID = id;
}
public void Product()
{
Console.WriteLine(“已下单 产品名称:{0},产品ID:{1}”, productnName, productID);
}
}
class Program
{
static void Main(string[] args)
{
publish pub = new publish();//供货商;
Order people1=new Order(“小米2s”,100);//消费者1需要小米2S;
Order people2 = new Order(“苹果5s”, 1000);//消费者2需要苹果5S;
pub.myevent += new Mydelegate(people1.Product);//people1订货;
pub.myevent += new Mydelegate(people2.Product);//people2订货;
pub.issue();//发货;
Console.ReadLine();
}
}
}
执行后如下显示.
上面的程序表达了一个供货商或厂商直接像消费者提供订货渠道,然后由订货者自己订货,只有供货商自己才能发货也就是说事件的定义者自己才能
触发事件,而事件处理程序由事件的订阅者定义.