zoukankan      html  css  js  c++  java
  • c#经典面试题:猫叫,主人醒,老鼠跑

    实现方法:分3个类实现,分别为猫类,老鼠类,主人类。

    猫类:定义一个猫叫事件;

    老鼠类:订阅猫叫事件,在猫发出叫声这个事件后,老鼠逃跑;

    主人类:类似于老鼠类,在猫发出叫声这个事件后,主人醒来;

    猫类实现如下:

    namespace CarCry
    {
    /// <summary>
    /// 猫类的定义
    /// </summary>
    public class Cat
    {
    //猫名
    private string _name;
    //猫叫事件
    public event EventHandler<CatCryEventArgs> CatCryEvent;
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="name">名字参数</param>
    public Cat(string name)
    {
    _name
    = name;
    }

    /// <summary>
    /// 促发猫叫的事件
    /// </summary>
    public void CatCry()
    {
    CatCryEventArgs args
    = new CatCryEventArgs(_name);
    Console.WriteLine(args);
    CatCryEvent(
    this, args);
    }
    }

    /// <summary>
    /// 猫叫事件参数
    /// </summary>
    public class CatCryEventArgs : EventArgs
    {
    //发出叫声的猫的名字
    private string _catname;
    /// <summary>
    /// 构造函数
    /// </summary>
    public CatCryEventArgs(string catname)
    :
    base()
    {
    _catname
    = catname;
    }

    /// <summary>
    /// 输出参数内容
    /// </summary>
    public override string ToString()
    {
    return "" + _catname + " 叫了";
    }
    }
    }

    老鼠类的实现如下:

    namespace CarCry
    {
    public class Mouse
    {
    //老鼠名字
    private string _name;
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="name">老鼠的名字</param>
    /// <param name="cat">发出叫声的猫</param>
    public Mouse(string name, Cat cat)
    {
    _name
    = name;
    cat.CatCryEvent
    += CatCryHandle;//订阅猫叫事件
    }

    /// <summary>
    /// 猫叫事件处理
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args"></param>
    private void CatCryHandle(object sender, CatCryEventArgs args)
    {
    Run();
    }

    /// <summary>
    /// 逃跑方法
    /// </summary>
    private void Run()
    {
    Console.WriteLine(
    "老鼠 " + _name + " 逃跑了");
    }
    }
    }

    主人类的实现如下:

    namespace CarCry
    {
    public class Master
    {
    //主人名字
    private string _name;

    /// <summary>
    /// 构造函数,订阅事件
    /// </summary>
    /// <param name="name">主人名字</param>
    /// <param name="cat"></param>
    public Master(string name, Cat cat)
    {
    _name
    = name;
    cat.CatCryEvent
    += CatCryHandler;//订阅猫叫事件
    }

    /// <summary>
    /// 猫叫事件处理
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args">猫叫事件</param>
    private void CatCryHandler(object sender, CatCryEventArgs args)
    {
    WakeUp();
    }

    /// <summary>
    /// 主人醒了事件
    /// </summary>
    private void WakeUp()
    {
    Console.WriteLine(
    "主人 " + _name + " 醒了");
    }
    }
    }

    主函数的调用如下:

    namespace CarCry
    {
    class MainClass
    {
    static void Main(string[] args)
    {
    Console.WriteLine(
    "开始模拟");
    Cat cat
    = new Cat("Tom");
    Mouse mouse1
    = new Mouse("Jack", cat);
    Mouse mouse2
    = new Mouse("jackson", cat);
    Master master
    = new Master("Tao", cat);
    Master master2
    = new Master("Hong", cat);
    cat.CatCry();
    Console.ReadLine();
    }
    }
    }
  • 相关阅读:
    javaweb 安全传输签名机制
    GC详解及Minor GC和Full GC触发条件总结
    程序员的人性思考(上)
    LeetCode 845——数组中的最长山脉
    LeetCode 386——字典序的第 K 小数字
    LeetCode 386——字典序排数
    LeetCode 135——分发糖果
    Ubuntu 16.04 安装显卡驱动后循环登录和无法设置分辨率的一种解决方案
    在 Ubuntu 下安装 Deepin 的 QQ、微信、百度云和迅雷等软件
    腾讯 2019 春季暑期实习生提前批笔试——技术研究与数据分析
  • 原文地址:https://www.cnblogs.com/JuneZhang/p/2094896.html
Copyright © 2011-2022 走看看