当前位置: 首页 > news >正文

无锡seo网站推广百度推广介绍

无锡seo网站推广,百度推广介绍,免费ppt模板300套,整个局域网都无法访问wordpress在C#编程语言中#xff0c;事件#xff08;Event#xff09;是一个非常重要的概念#xff0c;它提供了一种松耦合的方式#xff0c;让对象间能够通知彼此#xff0c;而无需直接联系。事件的使用可以让我们的代码更加灵活、可扩展且易于维护。 事件可以视作委托的实例事件Event是一个非常重要的概念它提供了一种松耦合的方式让对象间能够通知彼此而无需直接联系。事件的使用可以让我们的代码更加灵活、可扩展且易于维护。 事件可以视作委托的实例因此熟悉委托的使用对理解事件是有帮助的如果学过C语言委托就相当于定义一个指向函数的指针类型事件就相当于指向函数的指针变量不熟悉委托也不影响本文的阅读。 本文将通过一个经典的生活案例“闹钟一响打工人就要起床了”来讲解C#中事件Event的基本概念和使用方法。 一、事件的基本概念 通过事件可以让一个类发布者c1向另一个类订阅者c2发出通知告诉它某个特定操作已经发生。 事件的核心问题是如何用发布者c1中的方法f1去调用订阅者c2中的方法f2。 基本的思路是在c1中定义一个指向f2方法的变量v然后在f1中调用v。这样就实现了通过c1中的方法f1来调用c2中的方法f2。 我给概括为以下几个要素 2个类发布者、发送者 → c1订阅者、接收者 → c2 2个方法触发事件的方法 → f1发布者事件的处理方法 → f2订阅者 1个变量事件 → v在c1中定义但不在c1中赋值 4个关键事件的类型 → q1事件的赋值 → q2事件的触发 → f2的调用 → q3触发的调用 → f1的调用 → q4 二、经典案例“闹钟响了打工人就要起床了” 用“闹钟响了打工人就要起床了”作为一个现实中的例子来模拟C#中的事件。假设我们有一个闹钟发布者和一个打工人订阅者。每当闹钟响起时打工人就要起床上班了。这个过程中的关键是打工人并不直接控制闹钟而是通过事件来接收到闹钟响起的通知从而作出反应。 三、用C#模拟“闹钟响了打工人就要起床了” 下面是实现这个经典案例C#代码 using System;namespace Demo {class Program{static void Main(string[] args){Alarms alarm new Alarms();Workers worker new Workers();alarm.OnRingSound worker.getupWorker; //4个问题之q2→事件的赋值Console.Write(请输入闹钟参数表示闹钟响的次数);uint nClock Convert.ToUInt16(Console.ReadLine());alarm.ringAlarm(nClock); //4个问题之q4→触发的调用→f1的调用Console.ReadLine();}}public class Alarms //2个类之c1发布者{public delegate void RingEvent(); //4个问题之q1→事件的类型public RingEvent OnRingSound; //1个变量之事件vpublic void ringAlarm(uint ringKind) //2个方法之f1触发事件的方法{Console.Write($闹钟响{ringKind}次了。);OnRingSound(); //4个问题之q3→事件的触发→f2的调用}}public class Workers //2个类之c2订阅者{public void getupWorker() //2个方法之f2事件的处理方法{Console.WriteLine($打工人起床);}} } 四、为什么使用事件 在进行事件的赋值时使用符号而不是直接使用符号或者赋值一个空引用这些操作会对事件的安全性造成威胁。 为了解决这个问题C#提供了专门的事件处理机制以保证事件订阅的可靠性。事件通过在委托声明中添加event关键字来实现如下所示 public event RingEvent OnRingSound; 此时以下代码会出现编译错误 alarm.OnRingSound worker.getupWorker;  // 编译错误不能直接赋值alarm.OnRingSound null;                // 编译错误不能直接赋值为null 而通过订阅事件时可以使用来注册事件处理方法 alarm.OnRingSound worker.getupWorker;     // 正确订阅事件alarm.OnRingSound - worker.getupWorker;     // 正确取消订阅事件 下面是“event”正统代码 using System;namespace Demo {class Program{static void Main(string[] args){Alarms alarm new Alarms();Workers worker new Workers();worker.subscribeToRing(alarm); //类作为实参进行传递时是地址传递Console.Write(请输入闹钟参数表示闹钟响的次数);uint nClock Convert.ToUInt16(Console.ReadLine());alarm.ringAlarm(nClock); //4个问题之q4→触发的调用→f1的调用Console.ReadLine();}}public class Alarms //2个类之c1发布者{public delegate void RingEvent(); //4个问题之q1→事件的类型public event RingEvent OnRingSound; //1个变量之事件vpublic void ringAlarm(uint ringKind) //2个方法之f1触发事件的方法{Console.Write($闹钟响{ringKind}次了。);OnRingSound(); //4个问题之q3→事件的触发→f2的调用}}public class Workers //2个类之c2订阅者{public void subscribeToRing(Alarms a) {a.OnRingSound getupWorker; //4个问题之q2→事件的赋值}public void getupWorker() //2个方法之f2事件的处理方法{Console.WriteLine($打工人起床);}} }进一步概括 2个类发布者、发送者 → c1订阅者、接收者 → c2 2个方法触发事件的方法 → f1发布者c1中事件的处理方法 → f2订阅者c2中 1个变量事件 → v在c1中定义在c2中赋值 4个关键事件的类型 → q1 → c1中事件的赋值 → q2 → c2中事件的触发 → f2的调用 → q3 → c1中触发的调用 → f1的调用 → q4 → c1、c2外 发布者的实例化 订阅者的实例化订阅者订阅 4个问题之q4→触发的调用→f1的调用2个类之c1发布者 {4个问题之q1→事件的类型1个变量之事件v2个方法之f1触发事件的方法{4个问题之q3→事件的触发→f2的调用} }2个类之c2订阅者 {订阅的方法{4个问题之q2→事件的赋值}2个方法之f2事件的处理方法{} } 五、总结 通过这个经典案例“闹钟响了打工人就要起床了”我们可以看到事件如何使得C#程序中的各个部分保持松耦合发布者与订阅者之间并不直接依赖而是通过事件机制进行通信。这种设计使得我们的代码更加灵活和可扩展。 后续的系统性学习可以看【C#从入门到精通第6版】的《17.5 事件》或【叩响C#之门】的《16.4 事件处理机制》。 参考 清华大学出版社-图书详情-《C#从入门到精通第6版》 叩响C#之门 (豆瓣) C# 事件Event | 菜鸟教程 C#事件--全网最全全网最易理解-CSDN博客 ChatGPT | OpenAI
http://www.tj-hxxt.cn/news/227318.html

相关文章:

  • 中国最权威的网站排名百度账号免费注册
  • 智能自助建站系统源码深圳网站建设设计平台
  • 彩票娱乐网站建设开发Sage WordPress商城主题
  • 厦门百城建设有限公司网站哪些网站有好的营销案例
  • 天猫做网站图文制作app
  • thinkphp做网站教程广州市平安建设 网站
  • 广东工程建设监理有限公司网站建设网站时的故障分类
  • 家庭厨房做外卖网站什么网站有做面条的app
  • 大连网站设计制作方案中药材初加工平台
  • 福建省建设厅网站施工员查询成都最新防疫政策
  • 餐饮类网站建设达到的作用甘肃建设体网站
  • 公司网站销售平台建设费分录西安二次感染最新消息
  • 国家免费技能培训有哪些怎么做网站标题优化
  • 潍坊网页模板建站韶关手机网站建站
  • 信息化和网站建设管理工作情况网站登录界面源码
  • 嘉兴做外贸网站的公司wordpress预加载插件
  • nginx怎么做多个网站优质的广州做网站
  • 招商加盟网站模板html品牌策划大赛作品
  • 南京市英语网站建设深圳菜谱制作
  • 好的网站设计培训学校wordpress autotags
  • 手机网站建设的重点步骤科学松鼠会 wordpress主题
  • 甘肃省交通建设项目招投标中心网站做文案策划需要用到的网站
  • 东莞微信网站商城建设哈尔滨自助建站软件
  • 网站关键字优化教程潍坊400建网站公司
  • 前端自己写代码建网站要花多少钱有没有专门做尾料回收的网站
  • 织梦模板网站附近网站建设公司
  • 厦门市城市建设档案馆网站牡丹江最新信息网0453
  • 丰城建设网站网站开发的费用属于什么科目
  • 文件外链生成网站平面设计师个人网站
  • 网站世界排名怎么做软件大全链接网站