您的位置:首页 > 编程语言 > C#

C#中的委托和事件

2010-04-24 22:16 183 查看
首先从定义开始吧,委托(msdn上是这么说的):是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。事件的定义:在 发生其关注的事情时用来提供通知的一种方式,事件使用委托来为触发时将调用的方法提供类型安全的封装。所以事件和委托联系比较紧(不知道可不可以这样 说)。那么怎么使用委托和事件呢,现在有这样一个例子:现在有一只猫和两只老鼠,当猫叫的时候,那么老鼠就开跑。这正好可以用事件来处理这个程序,也就是 说猫叫的方法触发时,老鼠就执行跑的方法。在这里让猫叫触发时通知老鼠就可以用到事件和委托了。好了,具体的实现方式如下:
首先声明一个猫类:
class Cat
{
private string name;
public Cat(string name)
{
this.name = name;
}
public delegate void CatShoutEventHandle();//声明一个猫叫的委托
public event CatShoutEventHandle CatShout;//声明一个猫叫事件,其事件类型是委托catshouteventhandle
public void Shout()
{
Console.WriteLine("喵,我是猫{0}来了。", name);
if (CatShout != null) //如果登记对象事件不为空,则执行该事件
{
CatShout();
}
}
}
再声明一个老鼠类:
class Mouse
{
private string name;
public Mouse(string name)
{
this.name = name;
}
public void Run()
{
Console.WriteLine("我是老鼠{0}猫来了快跑!", name);
}
}
对于要让整个过程实现,还要一个关键的Main函数:
static void Main(string[] args)
{
Cat cat = new Cat("Jim");
Mouse mouse1 = new Mouse("lily");
Mouse mouse2 = new Mouse("Tom");
cat.CatShout += new Cat.CatShoutEventHandle(mouse1.Run);
cat.CatShout += new Cat.CatShoutEventHandle(mouse2.Run);
cat.Shout();
Console.Read();
}
其中cat.CatShout += new Cat.CatShoutEventHandle(mouse1.Run);就是比较关键的部分了,这句代码的意思是:将老鼠的RUN方法通过实例化委托 Cat.CatShoutEventHandle登记到猫的CatShout事件中。这样猫在执行shout方法时就可以触发执行老鼠的RUN方法了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: