技术成就梦想

知道用户需求,做到专注!c#,donet,Frameworks,UML,面向对象,设计模式!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Delegate示例

Posted on 2009-11-28 14:42  我不是高手  阅读(373)  评论(0编辑  收藏  举报

我们先看一个代理的示例,通过这个示例我们进一步的了解代理的用法(这个示例可以直接运行):

示例:半夜,一个房子里,猫大叫,主人惊醒,老鼠吓跑!

              分析:首先我们得有个房子,房子里有一只猫,有个主人,还有一只老鼠(可能很多,呵呵呵)。猫有个叫的方法,主人有个惊醒的方法,老鼠有个吓跑的方法,当猫一叫,触发主人惊喜的方法和老鼠吓跑的方法。所以我们在猫的类里边放一个代理,代理的是主人惊醒的方法和老鼠吓跑的方法,当老鼠一叫,我们只需要调用这个代理就行了。

那么我们就看下边的代理:

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 ("老鼠:猫来了,快跑!");

        }

    }

}