事件触发 ,事件发布()
事 件
事件发布者:通知某件事件发生的,就是发布者
事件订阅者:对某件事件关注的,就是订阅者
事件行为:触发和注册
事件发生时,会通知所有关注该事件的订阅者---调用订阅者(对象)的注册函数【注册,告诉发布者调用哪一个注册函数】
想在事件发生时被通知,必须注册表示关注
事件订阅:
事件名称+=方法1
事件名称-=方法2 【方法可以是,实例方法,静态方法,匿名方法、Lambada表达式】
下面的图改为静态static.newdog是委托事件名字。handler是委托类型。
静态变量newdog可以直接被类访问,初始化默认为null,当有订阅者加过来即方法,就会再newdog上加,继而触发事件。
事件订阅
NewDog += 方法
NewDog -= 方法
方法可以是,实例方法,静态方法,匿名方法
Lambda表达式
事件声明:
delegate void Handler();
public event Handler NewDog;
NewDog是一个成员,并且会被隐式自动初始化为null
事件触发和注册
事件发生时,会通知所有关注该事件的订阅者
想在事件发生时被通知,必须注册,以表示关注
事件==> 发布者和订阅者
发布者:通知某件事情发生的,就是发布者。
订阅者:对某件事情关注的,就是订阅者。
事件声明:
delegate void Handler();
public event Handler(委托类型) NewDog(事件名);
NewDog是一个成员,并且会被隐式自动初始化。
事件订阅
NewDog+=方法(订阅)
NewDog-=方法(取消订阅)
方法可以是,实例方法,静态方法,匿名方法
Lambda表达式
事件触发
if(NewDog!=null){
NewDog();
}
事件可以理解成是一种封装的受限制的委托。
事件 事件
事件就是对委托进行的一种封装
发布者:通知某事件发生 订阅者:对某事件关注
当事件发生时会通知所有的订阅者 如果想被通知则需要注册来关注这个事件
事件声明
delegate void Handler();
public event Handler NewDog;/* event是事件的关键字*/
事件订阅
NewDog+=方法 //关注
NewDog-=方法 //取消关注
方法可以是,实例方法,静态方法,匿名方法,Lambda表达式
事件触发与委托的关系
事件触发的语法
事件订阅的语法
事件声明,委托
注册,就是告诉发布者调用哪一个注册函数
时间触发和注册
事件,发布者和订阅者
是观察者设计模式的实现
发布者:通知某件事情发生的
订阅者:对某件事情关注的
触发:事件发生时,会通知所有关注该事件的订阅者
注册:想在事件发生时被通知,必须注册以表示关注
事情发生时,通知订阅者,就是调用订阅者的注册函数。注册,就是高数发布者调用哪一个注册函数。
事件声明:
delegate void Handler();
public event Handler NewDog; //Handler 委托类型 NewDog 事件名
//NewDog是一个成员,并且会被隐式自动初始化为null
事件订阅:
NewDog += 方法 //订阅
NewDog -= 方法 //取消订阅
//方法可以是,实例方法,静态方法,匿名方法、Lambda表达式
事件触发:
if(NewDog!=null)
{
NewDog();
}
事件可以理解成是一种封装的受限制的委托,事件是对进行的一种委托的封装,委托中保存着实际订阅者注册的函数,事件触发是调用的是委托当中持有的函数
class Dog:Pet,ww
{
//声明委托
public delegate void Handler();
//定义委托事件
public static event Handler NewDog;
public Dog(string name) : base(name)
{
if (NewDog != null)
{
//触发事件
NewDog();
}
}
}
class Client
{
//定义事件方法
public void WantADog()
{
Console.WriteLine("dog");
}
}
class Program
{
static void Main(string[] args)
{
Client client1 = new Client();
Client client2 = new Client();
//绑定事件方法
Dog.NewDog += client1.WantADog;
Dog.NewDog += client2.WantADog;
Dog dog2 = new Dog("A");
}
事件声明:
delegate void Handler(); // 委托
public event Handler NewDog; // event关键字 NewDog是事件名称
事件:
发布者和订阅者
通知某件事情发生的,就是发布者。
对某件事情关注的,就是订阅者。
事件触发和注册
事件发生时,会通知所有关注该事件的订阅者。
想在事件发生时被通知,必须注册以表示关注。
解释:
事件发生时,通知订阅者,就是调用订阅者的注册函数。
注册,就是告诉发布者调用哪一个注册函数
发布者:通知某件事情发生的
订阅者:对某件事情关注的
触发:事件发生时,会通知所有关注该事件的订阅者
注册:想在事件发生时被通知,必须注册以表示关注
事情发生时,通知订阅者,就是调用订阅者的注册函数。注册,就是高数发布者调用哪一个注册函数。
事件声明:
delegate void Handler();
public event Handler NewDog; //Handler 委托类型 NewDog 事件名
//NewDog是一个成员,并且会被隐式自动初始化为null
事件订阅:
NewDog += 方法 //订阅
NewDog -= 方法 //取消订阅
//方法可以是,实例方法,静态方法,匿名方法、Lambda表达式
事件触发:
if(NewDog!=null)
{
NewDog();
}
事件可以理解成是一种封装的受限制的委托,事件是对进行的一种委托的封装,委托中保存着实际订阅者注册的函数,事件触发是调用的是委托当中持有的函数
事件:
发布者
订阅者
事件触发
事件注册
用程序语言解释:事件发生时,通知订阅者,就是调用订阅者的注册函数。注册,就是告诉发布者调用哪一个注册函数
事件声明:
delegate void Handler();
public event Handler NewDog;
事件订阅:
NewDog+=方法 ;
NewDog-=方法
方法可以是,实例方法,静态方法,匿名方法,Lambda表达式
事件触发
if(NewDog!=null)
{
NewDog();
}
事件可以理解成是一种封装的受限制的委托
事件的声明:需要用关键字event
需要一个委托的类型
delegate void Handler();
需要声明事件的访问类型和委托类型依据事件的名称
public event Handler NewDog;//声明一个public类型的名为NewDog的事件,并且其委托类型为Handler