委托和简单事件的理解
1.室友带饭
叫室友带饭现在是一个非常普遍的一个现象,比如某个人在认真的打着游戏,就会委托室友给他带饭回来。那我们在程序中怎么来实现这个过程呢?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 委托1
{
//小明
class XiaoMing
{
public static void Help()
{
Console.WriteLine("哼!自己在寝室玩游戏不去吃饭叫我带,我欠你的呀!");
}
}
//Program代表打游戏叫小明带饭的人
class Program
{
// HelpEventHandler中的EventHandler是标准命名的方式,您也可以想一个自己的名字
// delegate声明委托的关键字,public delegate void HelpEventHandler();这就是声明一个委托。其实就是一个命令,
public delegate void HelpEventHandler();
static void Main(string[] args)
{
HelpEventHandler heh = new HelpEventHandler(XiaoMing.Help);
heh();
Console.ReadKey();
}
}
}//end of namespace
下面来看看这段代码:
public delegate void HelpEventHandler();
public static void Help()
{
Console.WriteLine("哼!自己在寝室玩游戏不去吃饭叫我带,我欠你的呀!");
}
从这段代码可以看出委托的返回值和参数列表,一定要和你想要绑定的方法的返回值和参数列表一样。
HelpEventHandler(XiaoMing.Help);
必须加上方法,因为委托的构造函数不为空。
2.不仅带饭,打游戏打渴了来一瓶矿泉水
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 委托1
{
//小明
class XiaoMing
{
public static void HelpX()
{
Console.WriteLine("哼!自己在寝室玩游戏不去吃饭叫我带,我欠你的呀!");
}
}
//王麻子
class WangMaZi
{
public static void HelpW()
{
Console.WriteLine("天气太热了,来瓶矿泉水!");
}
}
//打游戏的老兄
class Program
{
public delegate void HelpEventHandler();
static void Main(string[] args)
{
HelpEventHandler heh = new HelpEventHandler(XiaoMing.HelpX);
heh += WangMaZi.HelpW;
heh();
Console.ReadKey();
}
}
}//end of namespace
这个例子和上一个唯一的差别就是绑定了一个方法。可以理解为委托链。就是同一个命令可以执行多个动作了。
总结:
委托的声明方式:
public delegate void 委托名();//声明委托
public static void 方法名()//需要绑定的方法
{
方法体;
}
委托名 实例名 = new 委托名(方法名);
实例名();
委托其实就是一个命令。这个命令可以绑定多种响应。
下面我们来看看什么是事件
网银想必很多童鞋都开通了吧,有的网银就有这么一个功能就是,当你在网上每消费一笔的时候就会有相应的短息提示。为什么会有这个短信提示呢,(这还用问么,当然是我声请网银的时候开通了短信提示功能的噻),对,事件就和您去开通网银到消费到收到消费提示这一过程是一个道理,我们先来理一理这个过程哈。
首先你到银行开通网银和银行谈好只要有消费就要以短信方式通知(这就相当于你到银行注册了一个消费提醒的事件,委托银行把消费信息以短信的形式发给自己)。可能你这是就会问了,银行怎么知道什么时候改发短信提醒我呢。是呀!银行怎么知道么时候发呢。哈哈您忘了开户时不是我们在银行注册了一个消费提醒事件么,不错当我们只要有消费就触发了提醒事件,这是就自动给我们发短信了,
先来看看具体的实现把;
//小明的手机
class XiaoMingPhone
{
public static void Prompt()
{
Console.WriteLine("尊敬的用户你好,谢谢你在京东商城的消费");
}
}
//银行
class Bank
{
public delegate void sendMessage();//声明一个委托
public event sendMessage Consumption;//声明一个发信息这个事件
public void isConsum()//触发发短信的信号
{
if (Consumption != null)//判断是否注册了消费提醒
{
Consumption();
}
}
}
class Program
{
static void Main(string[] args)
{
//随便去一个银行,注册自己的消费提醒时事件,把自己的消费提醒委托给银行
Bank b = new Bank();
b.Consumption += new Bank.sendMessage(XiaoMingPhone.Prompt);//注册消费提醒事件
b.isConsum();//您在网上消费了,触发发短信的信号了
Console.ReadKey();
}
}
委托和事件的理解在于自己想一个情景把他模拟出来,现在动手自己模拟一个情景出来,这时你会发现委托原来就这么回事。大家先学会一般委托和一般自定义事件的写法,后续再献上标准事件的写法。