我对c#事件的理解

在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();
}

 

}
}

执行后如下显示.

 

 

上面的程序表达了一个供货商或厂商直接像消费者提供订货渠道,然后由订货者自己订货,只有供货商自己才能发货也就是说事件的定义者自己才能

触发事件,而事件处理程序由事件的订阅者定义.