委托(Delegate)的详解

xiaoxiao2021-02-28  157

1、定义         delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。与其它的类不同,delegate类能够拥有一个签名(signature),并且它"只能持有与它的签名相匹配的方法的引用"。        它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m。        delegate是面向对象、类型安全、可靠的受控(managed)对象。也就是说,运行时能够保证delegate指向一个有效的方法,你无须担心delegate会指向无效地址或者越界地址。 2、委托的声明原型  delegate <函数返回类型> <委托名> (<函数参数>) public delegate void CheckDelegate(int number); 委托在.net内相当于声明了一个类,类如果不实例化为对象,很多功能是没有办法使用的,委托也是如此。 3、委托的实例化 委托实例化的原型 <委托类型> <实例化名>=new <委托类型>(<注册函数>) CheckDelegate checkDelegate=new CheckDelegate(CheckMod); 4、创建步骤 (1)声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。 (2)创建delegate对象,并"将你想要传递的函数作为参数 传入"。 (3)通过上一步创建的对象来调用方法 创建一个Subject对象 using System; public class ConcreteSubject { /// <summary> /// 声明委托 /// </summary> public delegate void CustomerEventHandler(String state); // 声明一个委托事件,类型为 CustomerEventHandler public event CustomerEventHandler Update; static ConcreteSubject instance; private string subjectState; /// <summary> /// 观察者理应是单利模式 /// </summary> /// <value>The get.</value> public static ConcreteSubject Get() { if(instance == null) { instance = new ConcreteSubject (); } return instance; } public void Notify(string state) { if (Update != null) { // 使用事件来通知给订阅者 Update(state); } } } 创建一个监听着 using System; using UnityEngine; public class ConcreteObserver { public void GiveInvoice(string state) { Console.WriteLine("我是会计,我来开具发票。"); Debug.Log ("===================GiveInvoice==============:"+state); } } 使用的时候 ConcreteObserver observer_1 = new ConcreteObserver (); ConcreteObserver observer_2 = new ConcreteObserver (); ConcreteSubject.Get ().Update += observer_1.GiveInvoice; ConcreteSubject.Get ().Update += observer_2.GiveInvoice;
转载请注明原文地址: https://www.6miu.com/read-70671.html

最新回复(0)