.NET简谈静态事件链

在我们日常开发过程中经常会遇到多个类实例之间的关联,不管是B/S还是C/S的项目,在对实例的使用是一样的;只不过C/S的项目比较好控制,不管是UI层的对象都能很好的控制,包括继承、重写等等;而在B/S里面可能不太方便,由于B/S本身的特点,不能暴露内部太多的继承关系,以免不小心破坏类的封闭性;我这篇文章主要是讨论在多个类实例之间怎么进行动态关联,比如我们在开发Winform项目的时候,可能会碰到两个或多个窗口之间协同工作的情况;本人在这种情况下采用的是静态事件链的解决方案,多个实例之间不存在主次之分,有人肯定会觉得在一个类中定义事件,在调用的类中去实例化并订阅相关事件;这样解决不了多实例互操作的关系,比如:我有五个窗口分布在主界面中,当我点击菜单栏中的一个刷新按钮时,想让这五个窗口同时刷新,这样一来就必须让这五个窗口实例都订阅来自一个地方的事件;我为什么用静态事件,就是为了方便多实例使用;如果读者不太清楚事件或者委托链之类的概念请阅读本人的另一篇文章“.NET简谈委托链”;

1:

2:

3:

图3中是静态事件链类的定义,定义一个静态事件好一个静态方法,注意本人在该类中也订阅了ClickEvent事件,就是怕没有任何实例订阅这个静态事件,然后又触发了这个事件,导致空地址封送失败,也就是空引用调用;

4:

图4是模拟窗口的一个实现,在构造函数中我们订阅了静态事件链中的一个ClickEvent事件;其余四个窗口都是一样的,我就不贴图片了;

 5:

6:

静态事件链就讲完了,通过一点触发多点的好方法,在我们开发过程中经常用到;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[上篇]

服务调用的目的体现在对某项服务功能的消费上,而功能的实现又定义在相应的服务类型中。不论WCF服务端框架处理服务调用请求的流程有多么复杂,最终都落实在服务实例的激...

2438
来自专栏ascii0x03的安全笔记

【C++】小心使用文件读写模式:回车('\r') 换行('\n')问题的一次纠结经历

原来没有仔细注意C++读写文件的二进制模式和文本模式,这次吃了大亏。(平台:windows  VS2012) BUG出现: 写了一个程序A,生成一个文本文件F保...

3697
来自专栏草根专栏

测试 ASP.NET Core API Controller

本文需要您了解ASP.NET Core MVC/Web API, xUnit以及Moq相关知识.

1264
来自专栏拂晓风起

Unity 添加自定义菜单(插件),添加功能

1074
来自专栏北京马哥教育

面试分享系列 | 17道Python面试题,让你在求职中无往不利

今天给大家分享的是Python面试题系列的第一篇文章,后续我也会陆续整理Python相关的问题给大家,无论是求职者还是新人都可以通过面试题来考察自己的能力缺陷。...

3614
来自专栏Golang语言社区

Go 语言系统调用简析

一、系统调用概述 系统调用是受控的内核入口,借助于这一机制,进程可以请求内核以自己的名义去执行某些动作。Linux 内核以 C 语言语法 API 接口形式(头文...

4798
来自专栏十月梦想

不同函数间的数据传递

        小程序不想mvc的框架一样,获取dom进行操作,只是依靠数据绑定,数据有限原则进行数据传输.

752
来自专栏张善友的专栏

使用自定义行为扩展 WCF

Windows® Communication Foundation (WCF) 提供了许多扩展点,供开发人员自定义运行时行为,从而实现服务调度和客户代理调用。您...

3637
来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复

前言   在测试搜索时出现的问题,mysql通过中文查询条件搜索不出数据,但是英文和数字可以搜索到记录,中文无返回记录。本文就是写一下发现问题的过程及解决方法...

3305
来自专栏北京马哥教育

python线程笔记

豌豆贴心提醒,本文阅读时间5分钟 来源:伯乐在线 原文:http://python.jobbole.com/87498/ 引言&动机 考虑一下...

3015

扫码关注云+社区

领取腾讯云代金券