类、事件与对象---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 ...
随机推荐
- C语言:贮油点建设问题(详解题目意思)
!!!!先看解析,后面附有代码!!!!!!! ,希望大家不懂的能认真看看,这些都是我在写的过程中不能理解,遇到的困难,然后弄懂之后总结出来给大家的,想学的一定要认真看完. 规律是: 贮油点之间相差50 ...
- kubernets之高级调度
一 节点的污点以及pod的容忍度以及节点的亲缘性对比 1.1 首先需要介绍的是节点的污点以及pod的污点容忍度 污点是节点的属性,容忍度是pod的属性,只有当一个pod的容忍度包含节点的污点,pod才 ...
- 腾讯云服务器Ubuntu-配置mysql,nginx,nodejs
趁着618腾讯云服务器的促销活动,笔者买了最低配置的云服务器,用作学习. 接上一篇文章的内容,系统方面选择了Ubuntu,版本是20.04 LTS. 选择Ubuntu的原因,主要是因为Ubuntu一 ...
- 如何更加优雅的使用 SSH 进行登录
引言 我们在日常的开发过程中,很多时候需要连接服务器查看日志或者在服务器上调试代码.但是,使用 ssh 命令登录服务器每次都需要输出密码,就比较繁琐.因此我们可以使用 sshpass 通过参数指定密码 ...
- C# 在Excel中添加、应用或删除筛选器 (日期筛选、文本筛选、数字筛选)
自动筛选器是 Excel 中的一个基本但极其有用的功能,它可以让你根据特定的条件来自动隐藏和显示你的数据.当有大量的数据需要处理时,这个功能可以帮你快速找到你需要的信息,从未更加有效地分析和处理相关数 ...
- 谁说爬虫只能Python?看我用C#快速简单实现爬虫开发和演示!
前言:说到爬虫,基本上清一色的都知道用Python,但是对于一些没玩过或者不想玩Python的来说,却比较头大一点.所以以下我站在C# 的角度,来写一个简单的Demo,用来演示C# 实现的简单小爬虫. ...
- 莫烦tensorflow学习记录 (4)Classification 分类学习
MNIST 数据 首先准备数据(MNIST库) from tensorflow.examples.tutorials.mnist import input_data mnist = input_dat ...
- taro 使用taro中的vue来完成小程序的开发
网址:https://taro-docs.jd.com/taro/docs/README 2.1.简介 Taro 是一个开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发 ...
- 用 Easysearch 帮助大型车企降本增效
最近某头部汽车集团需要针对当前 ES 集群进行优化,背景如下: ES 用于支撑包括核心营销系统.管理支持系统.财务类.IT 基础设施类.研发.自动驾驶等多个重要应用,合计超 50 余套集群,累计数据超 ...
- VictoriaLogs 要凭什么革了各家日志存储的命
如果大家对时序指标的存储方案有些了解,那大概率会听过 VictoriaMetrics,VictoriaMetrics 号称 Prometheus 的升级版,在性能和成本方面也确实做得很好,如果是夜莺新 ...