委托是对函数的封装,可以当做给方法的特征指定一个名称。而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程。
下面给大家展示一个小例子。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{ // 实例化老猫Tom和老鼠Jerry 和Jack
Cat cat = new Cat("Tom");
Mouse mouse1 = new Mouse("Jerry");
Mouse mouse2 = new Mouse("Jack");
//表示将Mouse的Run方法通过实例化委托Cat.CatShouEventHandler登记到Cat事件CatShout当中,其中“+=”表示“add_CatShout”的意思
cat.CatShout += new Cat.CatShouEventHandler(mouse1.Run);
cat.CatShout += new Cat.CatShouEventHandler(mouse2.Run);
cat.Shout();
Console.Read();
}
}
class Cat
{
private string name;
public Cat (string name)
{
this.name = name;
}
public delegate void CatShouEventHandler();//声明委托CatShouEventHandler
public event CatShouEventHandler CatShout;//声明事件CatShout,它的事件类型是CatShouEventHandler
public void Shout()
{
Console.WriteLine("喵,我是{0}.", name);
if (CatShout !=null)
{
CatShout(); //表示当执行Shout()方法时,如果CatShout中有对象登录事件,则执行CatShout()
}
}
}
class Mouse
{
private string name;
public Mouse(string name)
{
this.name = name;
}
public void Run() //用来逃跑的方法
{
Console.WriteLine("老猫来了,{0}快跑!", name);
}
}
}
通过运行,大家可以得到以下结果:
喵,我是Tom.
老猫来了,Jerry快跑!
老猫来了,Jack快跑!