类、事件与对象---Dad&Mom简单练习

发布时间 2023-10-27 16:36:12作者: Stephen_Young

目的:

模拟一个家庭日常发生的场景:妈妈做好饭,说:“开饭了!”,这是爸爸听到了妈妈的喊话就立马动身开始饭吃。而儿子此时正在打游戏,于是他就说:“等我打完这把游戏再吃!”。
借由次例子来展示C#的事件,加深对它的理解与运用。

一、新建3个对象:分别是Dad,Mom,Son;

Mom class有一个带名称的构造函数,一个“喊吃饭”的事件(用来给其他对象订阅),一个“做饭”的方法;

(1)Mom class

 class Mom
    {
        public string Name { get; private set; }

        public event Action CallEat;//定义CallEat事件,发布吃饭的消息

        public Mom(string name)
        {
            this.Name = name;
        }
        public void Cook()
        {
            Console.WriteLine( "{0}说:饭做好了,开饭啦!", this.Name);
            CallEat?.Invoke();//问号表示,如果CallEat为null,则不执行。
        }
    }

(2)Dad class

 class Dad
    {
        public Dad(string name)
        {
            this.Name = name;
        }
        public string Name { get; private set; }

        public void Eat() 
        {
            Console.WriteLine(this.Name+"说:吃饭喽!");
        }
     }

(3)Son class

class Son
    {
        public Son(string name)
        {
            this.Name = name;
        }
        public string Name { get; private set; }

        public void Eat()
        {
            Console.WriteLine(this.Name+"说:等我打完这把游戏再吃!");
        }
    }

好了,现在3个对象的模版(蓝图)也就是类已经开发完成;我们来看看他们在IDE里的样子:

妈妈:爸爸:儿子:

二、实例化对象、指定订阅关系、编写场景剧本。

实例化3个对象:使用构造函数(说明:当你开发了一个类的构造函数以后,默认构造函数将不可再使用了)

            Mom mom = new Mom("小新妈妈");
            Dad dad = new Dad("小新爸爸");
            Son son = new Son("儿子小新");

订阅事件:

爸爸用吃饭这个事件处理器来订阅了妈妈的一个事件CallEat,代码如下:

同理,儿子也用吃饭这个事件处理器来订阅了妈妈的CallEat事件,代码如下:

            mom.CallEat += son.Eat;

三、编写业务逻辑:

接下来任何时候,只要妈妈的Cook()发生,爸爸和儿子就会发生响应的响应;业务逻辑完整代码:

            mom.CallEat += dad.Eat;
            mom.CallEat += son.Eat;

            mom.Cook();//妈妈的做饭事情发生,做饭好了它会发布通知,订阅了此通知的用户便会通过Invoke执行响应各自的方法

执行的结果如下: