zoukankan      html  css  js  c++  java
  • Delegate示例

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

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

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

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

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

            }

        }

    }

  • 相关阅读:
    HDU 1166 敌兵布阵 我的第一棵树,线段树,树状数组。
    HDU 2544 最短路 第一个图论问题。
    位运算简介及实用技巧(三):进阶篇(2)
    用匈牙利算法求二分图的最大匹配
    求两个字符串的最长公共子序列的长度(动态规划)
    搜索之深度优先【迷宫搜索】(判断是否n步恰好可以到达某点)
    HDU 2955 Robberies
    STL简介
    HDU 1257 最少拦截系统
    HDU 2034 人见人爱AB
  • 原文地址:https://www.cnblogs.com/0000/p/1603005.html
Copyright © 2011-2022 走看看