老鼠,猫,主人的问题(委托学习系列一)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateDEMO
{
    //面试试题 老鼠,猫,主人的问题
    //由老鼠的活动引起老猫的醒,然后老猫在捉老鼠的时候,把主人吵醒
    //要保持类与类的低耦合,于是用委托实现。

    public delegate string WakeUp(); //定义委托

    //老鼠
    public class Mouse 
    {
        public string MouseAction()
        {
            return "我是JARRY,我是老鼠";
        }
    }

    //猫
    public class Cat
    {
        private WakeUp catWakeUp;
        public WakeUp CatWakeUp 
        {
            set { this.catWakeUp = value; }
            get { return this.catWakeUp; }
        }

        //Tom不会自己醒来,而是被某个对象的Action引起的,在本例中由老鼠Action引起的
        public string catAction()
        {
            return catWakeUp() + "\r\n我TOM猫醒了,我要捉老鼠";
        }
    }

    //主人
    public class Person
    {
        private WakeUp personWakeUp;
        public WakeUp PersonWakeUp
        {
            get { return this.personWakeUp; }
            set { this.personWakeUp = value; }
        }

        public string PersonAction()
        {
            return personWakeUp() + "\r\n Tom猫,把我弄醒了";
        }
    }
    
    
    class Program
    {
        static void Main(string[] args)
        {
            Mouse jarry = new Mouse();

            Cat tom = new Cat();
            //由Jarry的行动引发了Tom的醒来
            tom.CatWakeUp = new WakeUp(jarry.MouseAction);            

            Person hanliang = new Person();
            hanliang.PersonWakeUp = new WakeUp(tom.catAction);

            Console.Write( hanliang.PersonAction());
            Console.Read();
        }
    }
}

  

转载于:https://www.cnblogs.com/fync/archive/2012/02/16/2353972.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值