我们先看一个代理的示例,通过这个示例我们进一步的了解代理的用法(这个示例可以直接运行):
示例:半夜,一个房子里,猫大叫,主人惊醒,老鼠吓跑!
分析:首先我们得有个房子,房子里有一只猫,有个主人,还有一只老鼠(可能很多,呵呵呵)。猫有个叫的方法,主人有个惊醒的方法,老鼠有个吓跑的方法,当猫一叫,触发主人惊喜的方法和老鼠吓跑的方法。所以我们在猫的类里边放一个代理,代理的是主人惊醒的方法和老鼠吓跑的方法,当老鼠一叫,我们只需要调用这个代理就行了。
那么我们就看下边的代理:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelegateDemo
{
class mian
{
public static void Main(string[] args)
{
//初始化房子这个对象
House house = new House();
house.CheckCatCry();
}
}
class House
{
//房子里有猫,主人和老鼠三个对象
private Cat cat = new Cat();
private Human human = new Human();
private Mouse mouse = new Mouse();
public House()
{
//在构建房子时就应该把主人惊醒和老鼠吓跑的方法挂上,因为只有在一个房子里,才有可能发生半夜,一个房子里,猫大叫,主人惊醒,老鼠吓跑!这件事。
cat.catcry = new Cat.CatCryDelegate(human.JingXing);
cat.catcry += new Cat.CatCryDelegate(mouse.Pao);
}
public void CheckCatCry()
{
Console.WriteLine("猫叫了么?(1:叫了,2:没叫)");
string result = Console.ReadLine();
if (cat != null)
{
// 如果猫叫了
if (result.Equals("1"))
{
cat.Cry();
}
}
}
}
class Cat
{
//代理声明
public delegate void CatCryDelegate();
//初始化代理变量
public CatCryDelegate catcry;
public Cat()
{
}
//猫大叫的方法
public void Cry()
{
Console.WriteLine("猫:哇,喵,哇,喵喵!");
//猫大叫会触发主人惊醒,和老鼠吓跑两件事,这里我们已经在初始化房子的时候已经放到了代理(Catcry)里了,这里只需要触发这个代理就行了。
catcry();
}
}
//主人类
class Human
{
//主人的惊醒方法
public void JingXing()
{
Console .WriteLine ("主人:死猫别叫!");
}
}
//老鼠类
class Mouse
{
//老鼠的逃跑的方法
public void Pao()
{
Console.WriteLine ("老鼠:猫来了,快跑!");
}
}
}