事件
事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式。 任何其他组件都可以订阅事件,并在事件引发时得到通知。
类 或对象可以通过事件向其他类或对象通知发生的相关事情。 发送(或引发)事件的类称为“发布者”,接收(或处理)事件的类称为“订阅者”。
简单来总结就是发布与订阅。
在声明一个委托类型前面添加event关键字就是事件。
public delegate void MyDelegate();//这是定义委托
public MyDelegate mydelegate;//声明一个委托类型的变量,作为类的成员
public event MyDelegate myEvent;//在声明一个委托类型前面添加event关键字就是事件。
事件具有以下属性:
1.发行者确定何时引发事件;订户确定对事件作出何种响应。
2.一个事件可以有多个订户。 订户可以处理来自多个发行者的多个事件。
3.没有订户的事件永远也不会引发。
4.事件通常用于表示用户操作,例如单击按钮或图形用户界面中的菜单选项。
5.当事件具有多个订户时,引发该事件时会同步调用事件处理程序。 若要异步调用事件,请参阅 “使用异步方式调用同步方法”。
在 .NET 类库中,事件基于 EventHandler 委托和 EventArgs 基类。
上面节选自C#文档,下面是文档连接:
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/events/
观察者模式例子
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。
关于观察者模式跟详细可以百度一下。
猫类(被观察者)发布者
namespace _011观察者模式_猫抓老鼠
{
/// <summary>
/// 猫是被观察者
/// </summary>
class Cat
{
private string name;
private string color;
public Cat(string name,string color)
{
this.name = name