angularjs 做的网站,网络平台推广广告费用,实名认证sdk,微信分销系统源码委托与事件是一种观察者模式。 什么是委托与事件 在c#中#xff0c;委托类似于代理#xff0c;也跟其它语言的函数指针、回调函数等相似#xff0c;但委托是类型安全和可靠的。声明自定义委托时#xff0c;加上delegate关键字#xff0c;委托定义类似于接口。
事件是特殊…委托与事件是一种观察者模式。 什么是委托与事件 在c#中委托类似于代理也跟其它语言的函数指针、回调函数等相似但委托是类型安全和可靠的。声明自定义委托时加上delegate关键字委托定义类似于接口。
事件是特殊类型的多播委托仅可从发布者中调用如果其它类或结构订阅了该事件则当发布者引发该事件时会调用其事件处理程序方法。 特殊的委托类型 Action 是无返回值的委托
Action 表示无参无返回值的泛型委托 Actionint,string,bool表示传入参数int,string,bool无返回值的委托 Actionint,int,int,int表示传入4个int型参数无返回值的委托
Func 是有返回值的泛型委托
Func int 表示无参返回值为int的委托 Funcobject,string,int 表示传入参数为object, string返回值为int的委托 FuncT1,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 postransform.position;pos.y Random.Range(.3f,1.0f);transform.position pos;}
}小结 发布者负责定义事件与调用事件而订阅者负责注册事件与具体的操作处理。