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

            }

        }

    }

  • 相关阅读:
    Atitit 图像处理30大经典算法attilax总结
    Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结
    Atitit  rgb yuv  hsv HSL 模式和 HSV(HSB) 图像色彩空间的区别
    Atitit  从 RGB 到 HSL 或 HSV 的转换
    Atitit 图像清晰度 模糊度 检测 识别 评价算法 原理
    Atitit 修改密码的功能流程设计 attilax总结
    atitit 点播系统 概览 v2 qb1.docx
    Atitit dsl exer v3 qb3 新特性
    atitit.TokenService v3 qb1  token服务模块的设计 新特性.docx
    Atitit 异常机制与异常处理的原理与概论
  • 原文地址:https://www.cnblogs.com/0000/p/1603005.html
Copyright © 2020-2023  润新知