博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第509篇-Delegate和Event异同--(内容篇5:共6篇)
阅读量:4959 次
发布时间:2019-06-12

本文共 1667 字,大约阅读时间需要 5 分钟。

如何让事件只允许一个客户订阅?少数情况下,比如像上面,为了避免发生“值覆盖”的情况(更多是在异步调用方法时,后面会讨论),我们可能想限制只允许一个客户端注册。此时怎么做呢?我们可以向下面这样,将事件声明为private的, 然后提供发布者提供两个方法来进行注册和取消注册. (前一博文是subseribe.Subscribe(publisher)进行注册).

代码:

namespace DelegateEventDemo{    class Class3    {        [STAThread]        static void Main2(string[] args)        {            Publishser publisher = new Publishser();            Subscriber1 subscribe = new Subscriber1();            publisher.Register(subscribe.OnNumberChanged);            publisher.DoSomething();            // unregister             publisher.UnRegister(subscribe.OnNumberChanged);             publisher.DoSomething(); // will not invoke the method        }    }    public delegate string GeneralEventHandler();    // 定义事件发布者    public class Publishser    {        private event GeneralEventHandler NumberChanged;    // 声明一个私有事件        // 注册事件        public void Register(GeneralEventHandler method)        {            // 注意不是+=. 在客户端只能是+=或是-=, 但是在定义类可以是=, +=            NumberChanged = method;        }        // 取消注册        public void UnRegister(GeneralEventHandler method)        {            NumberChanged -= method;        }        public void DoSomething()        {            // 做某些其余的事情            if (NumberChanged != null)            {    // 触发事件                string rtn = NumberChanged();                Console.WriteLine("Return: {0}", rtn);      // 打印返回的字符串,输出为Subscriber3            }        }    }    // 定义事件订阅者    public class Subscriber1    {        public string OnNumberChanged()        {            return "Subscriber1";        }    }}

我们看到,unregister后的方法不会再调用:

转载于:https://www.cnblogs.com/shanghaijimzhou/archive/2013/03/04/2943203.html

你可能感兴趣的文章
CODE[VS] 1842 递归第一次
查看>>
20180418小测
查看>>
Spring Cloud是怎么运行的?
查看>>
12 联结表
查看>>
数字三角形
查看>>
NGUI 减少drawcall规则
查看>>
三元表达,匿名函数
查看>>
前端笔记-基础笔记
查看>>
【LeetCode & 剑指offer刷题】查找与排序题6:33. Search in Rotated Sorted Array(系列)
查看>>
GNU/Linux超级本ZaReason Ultralap 440体验
查看>>
将github上托管的代码 在我的域名下运行
查看>>
【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C】Equalize
查看>>
【codeforces 767A】Snacktower
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
我最喜欢的 5 个 Gedit 插件
查看>>
OOoLatex:在 OpenOffice.org 中拔出 Latex 公式
查看>>
linu学习第二天:文件系统相关操作
查看>>
执行了的程序,才是你的程序.
查看>>