上一篇“委托与事件(一)”,我讲的是委托,主要是为这篇讲的“事件”做铺垫的!
学事件最开始明白这一点就够用了-----委托与事件本质上是一样的!
到底一样在哪里呢!接下来慢慢读,你就能体会其中的含义了。
写代码之前,我们先进入这样的一个场景!
想象着在一个漆黑的夜晚里,
猫抓老鼠,发现了老鼠的踪迹!
猫,叫了一声!老鼠被吓跑了!
狗发现有动静!“旺旺旺!”叫了!
小偷躲了起来!
人在睡梦中,被吵醒了!
上面的场景且不说想象合不合理先,我们可以从上面的场景中提取出这几个关键字!
猫追...
鼠跑...
狗叫...
人醒...
小偷躲...
围绕着这几个关键字我们可以定义这么几个类:Cat、Dog、Mouse、People和Stealer,
每个类对应的方法分别如下:
public class Cat
{
public void Miao()
{
Console.WriteLine("猫追...");
}
}
public class Dog
{
public static void Wang()
{
Console.WriteLine("狗叫了一声...");
}
}
public class Mouse
{
public static void Run()
{
Console.WriteLine("老鼠跑了...");
}
}
public class People
{
public static void Awake()
{
Console.WriteLine("人醒了...");
}
}
public class Stealer
{
public static void Hide()
{
Console.WriteLine("小偷躲起来了...");
}
}
如果根据上一篇《委托与事件(一)》中的知识点为下面的“Miao”方法声明一个委托我们要怎么做呢!
根据这个知识点
如果我们要为下面的这个方法写委托
public void Miao()
{
Console.WriteLine("猫追...");
}
是不是要这样为Miao
public delegate void CatMiaoHandler();声明委托呢?
委托声明了 我们就要为委托实例化
public CatMiaoHandler CatMiaoHandlerMethod;//委托的实例
因此Cat类里面的方法要改为以下:
public class Cat
{
public delegate void CatMiaoHandler();//声明委托
public CatMiaoHandler CatMiaoHandlerMethod;//委托的实例
//委托是一种类型....事件是委托类型的实例
public void Miao()
{
Console.WriteLine("猫追...");
//if (CatMiaoHandlerMethod != null)
//{
// CatMiaoHandlerMethod();
//}
Console.WriteLine("委托");
CatMiaoHandlerMethod?.Invoke();
}
}
先说如何用委托调用以上的方法:
static void Main(string[] args)
{
Cat cat = new Cat();
//使用委托调用
cat.CatMiaoHandlerMethod = new Cat.CatMiaoHandler(Dog.Wang);//区别3
cat.CatMiaoHandlerMethod += Mouse.Run;
cat.CatMiaoHandlerMethod += People.Awake;
cat.CatMiaoHandlerMethod += Stealer.Hide;
cat.Miao();
Console.ReadKey();
}
下面将说明又是如何用事件调用方法的!
首先Cat类我们要修改成下面的样子:
public class Cat
{
public delegate void CatMiaoHandler();//声明委托
public event CatMiaoHandler CatMiaoHandlerMethodEvent;//声明事件,事件的本质就是委托的一个实例,加了Event关键字修饰
//委托是一种类型....事件是委托类型的实例
public void Miao()
{
Console.WriteLine("猫追...");
//if (CatMiaoHandlerMethodEvent != null)
//{
// CatMiaoHandlerMethodEvent();
//}
Console.WriteLine("事件");
CatMiaoHandlerMethodEvent?.Invoke();
}
}
然后调用是这样的:
static void Main(string[] args)
{
Cat cat = new Cat();
//使用事件调用
cat.CatMiaoHandlerMethodEvent += Dog.Wang;
cat.CatMiaoHandlerMethodEvent += Mouse.Run;
cat.CatMiaoHandlerMethodEvent += People.Awake;
cat.CatMiaoHandlerMethodEvent += Stealer.Hide;
cat.Miao();
Console.ReadKey();
}
说了这么多的废话,不知道大家从我这里学没学会看这个事件!
最后把代码全部敲好了,运行结果是:
在贴出几个关键地方的代码:
委托和事件就讲这么多!
懂了这两篇文章说的东西,相信你就很容易能看懂说的更深入一层的委托和事件了!