先在一个你想要注册事件类中提前写好一个委托方法,例如delegate void Handler【委托类型】();然后再写一个事件声明,例如public static event Handler【委托类型】 NewDog【事件名】;事件声明使用static,便于直接添加事件,也就是【类名.事件名 += 想要注册的方法】,取消事件是【类名.事件名 -=想要注册的方法 】
具体步骤可以这样:1.delegate void Handler【委托类型】();
2.public static event Handler【委托类型】 NewDog【事件名】;
3.【类名.事件名 += 想要注册的方法】 (这里的类名是你事件所在的那个类(也就是委托方法所在的那个类),想要注册的方法是你要给哪个类注册事件的方法)
这是我对事件的理解,如果有不对或者说的不准确的地方,希望大家能够指出,谢谢大家了,希望能帮到你,一起加油^.^
按照原本的事件发生方式,先定义委托,然后定义事件,再判断事件是否触发(即是否发生),最后再执行订阅或取消订阅事件。前面声明了两个客户,然后有Dog.NewDog += c1.WantDog,这里的意思应该是先判断NewDog是否为空,即商店有没有新狗狗,然后在再根据客户的消息WantADog订阅事件。而第二个注册事件是先判断有没有WantDog(但是老师写事件触发条件时候并没有写客户有没有WantDog,而是写的NewDog!=null)。因为按照逻辑是先看有没有新狗,再看有没有客户想要。而这样改变的话,就是看先有没有客户要狗狗,再看有没有新狗了。希望你能理解。。。
using System;
namespace demo8
{
class Program
{
static void Main(string[] args)
{
Client c1 = new Client();
Client c2 = new Client();
Dog.NewDog += c1.WantADog;
Dog.NewDog += c2.WantADog;
Dog dog = new Dog("tom");
}
}
public class Dog
{
static int Num;
public delegate void Hander();
public static event Hander NewDog;
public Dog(string name)
{
Num++;
if (NewDog != null)
{
NewDog();
}
}
}
class Client
{
public void WantADog()
{
Console.WriteLine("我想要一条狗");
}
}
}
后面是个委托的类型,不能简单的理解成方法名