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

C# 委托与事件 观察者模式

委托与事件是一种观察者模式

什么是委托与事件 

在c#中,委托类似于代理,也跟其它语言的函数指针、回调函数等相似,但委托是类型安全和可靠的。声明自定义委托时,加上delegate关键字,委托定义类似于接口。

事件是特殊类型的多播委托,仅可从发布者中调用,如果其它类或结构订阅了该事件,则当发布者引发该事件时,会调用其事件处理程序方法。

特殊的委托类型  

Action 是无返回值的委托

Action 表示无参,无返回值的泛型委托   
Action<int,string,bool>表示传入参数int,string,bool,无返回值的委托
Action<int,int,int,int>表示传入4个int型参数,无返回值的委托

Func 是有返回值的泛型委托  

Func< int > 表示无参,返回值为int的委托    
Func<object,string,int> 表示传入参数为object, string,返回值为int的委托   
Func<T1,T2,T3,int> 表示传入参数为泛型T1,T2,T3,返回值为int的委托   

发布订阅事件

发布者:负责定义和触发事件。发布者创建事件并在适当的时候触发它,通知所有订阅者事件的发生。它通常不关心事件的具体处理细节,只关注事件的发生。

发布者(主题):

在用户点击按钮时,它会触发一个“按钮点击”事件。它管理一个事件列表,知道哪些订阅者注册了对“按钮点击”事件的兴趣。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class controller : MonoBehaviour
{public delegate void ClickAAction();//定义无参无返回值的委托public static event ClickAAction OnClick;//定义OnClick事件private void OnGUI(){if(GUI.Button(new Rect(Screen.width/2-50,5,100,30),"click")){// if (OnClick != null)// {//     OnClick();// }OnClick?.Invoke();//调用事件,包括已订阅的事件}}
}

订阅者:负责响应事件。订阅者注册对事件的处理方法,并在事件被触发时执行这些处理方法。订阅者关心事件发生后的具体操作和逻辑。

订阅者(观察者):

它注册自己对“按钮点击”事件的兴趣,并提供一个函数来处理点击事件。当按钮被点击并触发事件时,函数被调用,记录下按钮点击的事件。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class manager : MonoBehaviour
{private void OnEnable(){controller.OnClick += Tele;//订阅事件}private void OnDisable(){controller.OnClick -= Tele;//取消订阅}void Tele(){Vector3 pos=transform.position;pos.y = Random.Range(.3f,1.0f);transform.position = pos;}
}

小结

发布者负责定义事件与调用事件,而订阅者负责注册事件与具体的操作处理。 

http://www.lryc.cn/news/438803.html

相关文章:

  • K8S - 用service account 登陆kubectl
  • Redis 持久化机制详解
  • 小阿轩yx-案例:Zabbix监控kubernetes云原生环境
  • 量化交易的个人见解
  • Java集合(一)
  • 车载软件架构 --- SOA设计与应用(下)
  • 网络原理 IP协议与以太网协议
  • k8s的安装
  • Qt中样式表常用的属性名称定义
  • React源码学习(一):如何学习React源码
  • 云计算服务的底层,虚拟化技术的实现原理
  • 大数据Flink(一百一十六):Flink SQL的时间属性
  • Ansible自动化部署kubernetes集群
  • 网络通信流程
  • 数据结构一:绪论
  • 使用OpenFeign在不同微服务之间传递用户信息时失败
  • js中【Worker】相关知识点详细解读
  • 使用Apify加载Twitter消息以进行微调的完整指南
  • 【C++算法】滑动窗口
  • (c++)猜数字(含根据当前时间生成伪随机数代码)
  • 优化批处理流程:自定义BatchProcessorUtils的设计与应用
  • Framebuffer应用编程
  • MongoDB根据字段内容长度查询语句
  • Android中的单例模式
  • python做游戏好用吗
  • 常用游戏运行库下载
  • (1)CLIP
  • MongoDB高可用和分片集群知识
  • 【Python日志功能】一.日志基础与基本配置
  • 深圳铨顺宏科技展邀您体验前沿人工智能技术