类、事件与对象---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执行响应各自的方法
执行的结果如下:

完
类、事件与对象---Dad&Mom简单练习的更多相关文章
- 《纵向切入ASP.NET 3.5控件和组件开发技术》笔记:高效率事件集合对象
在之前讲的几个例子中,使用的是最普通的定义事件方法,比如KingTextBox中事件是这样定义的:/// <summary>/// 获得本书更多内容,请看:/// http://blog. ...
- vue-阻止事件冒泡-开启右键-键盘类事件
一: 阻止事件冒泡 布局: 当点击按钮时,会触发button的click 也会触发父级的方法 <div id="box"> <div @click="p ...
- java匿名类和匿名对象及this的其他用法
/* 匿名内部类:就是内部类的简写格式. 必须前提:内部类必须继承或者实现一个类或者接口. 匿名内部类其实就是一个匿名 子类对象. 格式:new 父类对象 or 接口(){ 子类内容:(覆盖父类的, ...
- CSS 伪类和伪对象选(五)
一.伪选择器 伪选择器包括:伪类选择器和伪对象选择器,以冒号(:)作为前缀,冒号后紧跟伪类或者伪对象名称,冒号前后没有空格,否则解析为包含选择器 如: div:hover{ font-size:12p ...
- Python类,域,方法,对象,继承
类和对象: 是面向对象编程的两个主要方面,类创建一个新类型,而对象这个类的实例.. 域: 属于一个对象或类的变量被称为域.域有两种类型: 属于每个实例(类的对象)或属于类本身.它们分别被称为实例变量和 ...
- 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化
1. 首先, JavascriptSerializer类所在名空间: using System.Web.Script.Serialization; 2. 相关的3篇文章, 标记下: 使用JavaScr ...
- 从零开始学 Web 之 jQuery(七)事件冒泡,事件参数对象,链式编程原理
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- C# 有关控件、自定义类事件中的委托链的获取、移除操作
直接来代码吧,这样干脆直接,也不耽误我午休了.一切尽在源码中. public class ControlEventTool { /// <summary> /// 移除控件的某类事件, 如 ...
- 利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤
项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首 ...
- pyglet模块的EventDispatcher(事件派发对象)
事件派发对象用于处理事件的派发与响应,pyglet的window对象正是继承了它才具有处理事件的能力. 步骤: 1.注册事件类型: EventDispatcher.register_event_typ ...
随机推荐
- SpringCloud解决feign调用token丢失问题
背景讨论 feign请求 在微服务环境中,完成一个http请求,经常需要调用其他好几个服务才可以完成其功能,这种情况非常普遍,无法避免.那么就需要服务之间的通过feignClient发起请求,获取需要 ...
- element-plus表格添加删除行很慢
如果添加第一行或第二行就很慢,那么这个不是row-key的原因. 很有可能是nuxt的调试工具监控组件原因,可以试着把工具关了看看 devtools: { enabled: false }, 发布后不 ...
- YiShaAdmin:一款基于.NET Core Web + Bootstrap的企业级快速开发框架
前言 今天大姚给大家分享一款基于.NET Core Web + Bootstrap的企业级快速后台开发框架.权限管理系统,代码简单易懂.界面简洁美观(基于MIT License开源,免费可商用):Yi ...
- c++ 记一次把qrencode源码生成动态库的尝试
在网上搜二维码库:qrencode,源码下载:https://github.com/fukuchi/libqrencode 我的是windows环境,IDE是vs2022. 建立一个动态库的空工程. ...
- Android 13 - Media框架(24)- OMXNodeInstance(一)
关注公众号免费阅读全文,进入音视频开发技术分享群! 为了了解 ACodec 是如何与 OpenMAX 组件进行 buffer 流转的,我们有必要先来学习 OMXNodeInstance,在前面的章节中 ...
- 地图坐标转换 WGS84、BD09与GCJ02的相互转换
高德地图 WGS84转GCJ02 export function wgs84ToGcj02(lng, lat) { if (out_of_china(lng, lat)) { return [lng, ...
- Yii AR事务操作
Yii Ar事务操作,示例代码如下: $model=Post::model(); $transaction=$model->dbConnection->beginTransaction() ...
- MySql 增、删、改、查数据库
前言 之前几天写了MySql 的GROUP BY 语句和 JOIN 语句,今天补一下创建数据库.表的语句.首先假设已经暗转好MySQL 数据库,然后创建数据库.表. 创建数据库 create data ...
- windows nexus-3.20安装
1.Nexus官网:https://www.sonatype.com/download-oss-sonatype 2.环境变量NEXUS_HOME = D:\nexus-3.20.1-01-win64 ...
- hbck2的一些用法
一.执行 hbase org.apache.hbase.HBCK2 可以看到下面一些选择项 **示例: -d 打印debug日志 -s 跳过客户端与服务端一致性的版本检测 hbase org.apac ...