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

            }

        }

    }

  • 相关阅读:
    Delphi中创建一个可以改变大小的无边框窗口
    Delphi中让窗口关闭按钮无效的6种方法
    把人笑抽筋的签名
    Delphi中判断窗体最大化和最小化事件
    Delphi中窗体的帮助按钮上执行一个自定义的动作
    无法查询部门收支分析表
    Delphi中去掉限制窗体最小尺寸的Windows约束
    Delphi中在窗体标题栏画自定义文字
    调拨单等单据定位功能没有过滤条件
    Form中对象的引用
  • 原文地址:https://www.cnblogs.com/zxjyuan/p/1612603.html
Copyright © 2011-2022 走看看