类、事件与对象---Dad&Mom简单练习
目的:
模拟一个家庭日常发生的场景:妈妈做好饭,说:“开饭了!”,这是爸爸听到了妈妈的喊话就立马动身开始饭吃。而儿子此时正在打游戏,于是他就说:“等我打完这把游戏再吃!”。
借由次例子来展示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执行响应各自的方法