使用delegate类型设计自定义事件

在C#编程中,除了Method和Property,任何Class都可以有自己的事件(Event)。
定义和使用自定义事件的步骤如下:
(1)在Class之外定义一个delegate类型,用于确定事件程序的接口
(2)在Class内部,声明一个public event变量,类型为上一步骤定义的delegate类型
(3)在某个Method或者Property内部某处,触发事件
(4)Client程序中使用+=操作符指定事件处理程序 例子:


例子:


None.gif    // 定义Delegate类型,约束事件程序的参数
None.gif
    public delegate void MyEventHandler(object sender, long lineNumber) ;
None.gif
None.gif    
public class DataImports
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
// 定义新事件NewLineRead
InBlock.gif
        public event MyEventHandler NewLineRead ;
InBlock.gif
InBlock.gif        
public void ImportData()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
long i = 0 ; // 事件参数
InBlock.gif
            while()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                i
++ ;
InBlock.gif                
// 触发事件
InBlock.gif
                if( NewLineRead != null ) NewLineRead(this, i);
InBlock.gif                
//dot.gif
ExpandedSubBlockEnd.gif
            }

InBlock.gif            
//dot.gif
ExpandedSubBlockEnd.gif
        }

InBlock.gif        
//dot.gif
ExpandedBlockEnd.gif
    }

None.gif
None.gif
// 以下为Client代码
None.gif

None.gif    
private void CallMethod()
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
// 声明Class变量,不需要WithEvents
InBlock.gif
        private DataImports _da = null;
InBlock.gif        
// 指定事件处理程序
InBlock.gif
        _da.NewLineRead += new MyEventHandler(this.DA_EnterNewLine) ;
InBlock.gif        
// 调用Class方法,途中会触发事件
InBlock.gif
        _da.ImportData();
ExpandedBlockEnd.gif    }

None.gif    
// 事件处理程序
None.gif
    private void DA_EnterNewLine(object sender, long lineNumber)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
// dot.gif
ExpandedBlockEnd.gif
    }

None.gif
None.gif

转载于:https://www.cnblogs.com/miaomiaoga/archive/2004/11/14/63832.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各种学习资源 文档、手册 (Docker 、springboot 、Guava、git、logback 、Linux 、MQ、vue、Axios)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. Docker 中文手册 :https://yeasy.gitbooks.io/docker_practice/advanced_network/bridge.html 2. RESTful java with JA…

C语言的“编译时多态”

typeof 在 kernel 中的使用 —— C 语言的“编译时多态” C 语言本身没有多态的概念,函数没有重载的概念。然而随着 C 语言编写的软件逐渐庞大,越来越多地需要引入一些其他语言中的特性,来帮助更高效地进行开发,Linux kernel 是一…

看脸色知体内各积毒 有效清洁内脏妙方

观察下五脏六腑是否中毒。 淤血、痰湿、寒气这些不能及时排出体外,危害健康和精气神的物质,中医称之为毒素,在镜子里你也可以看出它们。识别之后,你更需要有效的内脏清洁妙方! 症状一:面色青两侧长痘黄褐斑愁云满面…

UTC Time

整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。UTC与格林尼治平均时(GMT, Greenwich Mean Time)一样&#xff0…

解决:Unknown custom element: <myData> - did you register the component correctly? For recursive compon

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 引用一个组件报错&#xff1a; Unknown custom element: <myData> - did you register the component correctly?For recursi…

无处不在的container_of

无处不在的container_of linux 内核中定义了一个非常精炼的双向循环链表及它的相关操作。如下所示&#xff1a; struct list_head {struct list_head* next, * prev; };ubuntu 12.04 中这个结构定义在 /usr/src/linux-headers-3.2.0-24-generic/include/linux/types.h 中&…

程序员学习能力提升三要素

摘要&#xff1a;IT技术的发展日新月异&#xff0c;新技术层出不穷&#xff0c;具有良好的学习能力&#xff0c;能及时获取新知识、随时补充和丰富自己&#xff0c;已成为程序员职业发展的核心竞争力。本文中&#xff0c;作者结合多年的学习经验总结出了提高程序员学习能力的三…

时间,数字 ,字符串之间的转换

package com.JUtils.base;import java.sql.Timestamp; import java.text.SimpleDateFormat;/*** 转换工具类<br>* 若待转换值为null或者出现异常&#xff0c;则使用默认值**/ public class ConvertUtils {/*** 字符串转换为int*** param str * 待转换的字符串* param …

宏定义及相关用法

宏定义及相关用法 欢迎各位补充 目录 一些成熟软件中常用的宏定义&#xff1a;使用一些内置宏跟踪调试&#xff1a;宏定义防止使用时错误&#xff1a;宏与函数 带副作用的宏参数 特殊符号&#xff1a;’#’、’##’ 1、一般用法2、当宏参数是另一个宏的时候 __VA_ARGS__与##…

解决:Cannot read property ‘component‘ of undefined ( 即 vue-router 0.x 转化为 2.x)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 vue项目原本是用0.x版本的vue-router&#xff0c;但是去报出&#xff1a;Cannot read property component of undefined 这是因为版本问…

AMD Mantle再添新作,引发下代GPU架构猜想

摘要&#xff1a;今年秋天即将发布的《希德梅尔文明&#xff1a;太空》将全面支持AMD Mantle API&#xff0c;如此强大的功能背后离不开强大的CPU、GPU支持。上周AMD爆出了下一代海盗岛R9 300系列&#xff0c;据网友猜测海盗岛家族可能用上速度更快的HBM堆栈式内存。 小伙伴们…

不作35岁的程序员?

程序员三部曲--不作35岁的程序员?摩西2000 在中国&#xff0c;程序员不能超过35岁&#xff0c;似乎已经是不争的事实&#xff0c;软件开发工作就是青春饭&#xff0c;顶多靠毕业这十年的时间&#xff0c;超过这个年龄&#xff0c;要不成功跃身成为管理者&#xff0c;要不转…

linux下使用TC模拟弱网络环境

linux下使用TC模拟弱网络环境 模拟延迟传输简介 netem 与 tc: netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块。该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延迟、丢包等等情 况。使用 Linux 2.6 (或以上) 版本内核…

CDN 是什么 、CDN 引入

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 CDN 的全称是 Content Delivery Network&#xff0c;即内容分发网络。 CDN的基本原理是广泛采用各种缓存服务器&#xff0c;将这些缓存…

长寿的人会有的8个健康理念

长寿的人会有的8个健康理念。年轻的时候总是在挥霍身体健康&#xff0c;吸烟、喝酒没有节制&#xff0c;到老了之后身体会出现各种问题。老年人如果想要身体健康、长寿的话&#xff0c;就要从日常生活习惯做起。下面小编就来介绍长寿的人会有的8个健康理念&#xff1a; 1、少…

Ubuntu下selenium+Chrome的安装使用

Ubuntu下seleniumChrome的安装使用 安装 chrome 官网下载安装包 sudo dpkg -i google-chrome-stable_current_amd64.deb whereis google-chrome 安装selenium pip3 install selenium 下载chromedriver(火狐使用geckodriver)驱动 http://npm.taobao.org/mirrors/chromed…

shoot for用法

Look, there are people like Ross who need to shoot for the stars, with his museum, and his papers getting published.---《老友记》 而像罗斯这种人则追求卓越&#xff0c;博物馆&#xff0c;发表论文。 争取;为...而努力Were shooting this year for a 50% increase in…

VUE : 双重 for 循环写法、table 解析任意 list 、万能表格组件、解析一维数组、动态生成 table 所有数据

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.需求&#xff1a; 我想要一个 table 组件能在实际调用时动态生成所有的 tr 、td 。 后端返回的只是一个 list &#xff0c; 前端页…

安全离职妙招

高招的离职&#xff0c;不但有可能让前老板帮你说好话&#xff0c;让前同事成为你的啦啦队&#xff0c;未来若有好机会&#xff0c;还会想到你&#xff0c;只要你学会克服离职流程中的五个尴尬情境。 情境一、离职怎么提&#xff1f; 口头请辞&#xff0c;最先告知上司。 有…

字节内推~

大佬们有兴趣来字节约饭么&#xff0c;下面是内推链接~ 社招内推链接&#xff1a;https://job.toutiao.com/s/LwpKWU8 校招内推链接&#xff1a;https://job.toutiao.com/s/LwsFw6g