【总结】C# 设置委托的机理和简要步骤
【引语】实际上,和Winform打交道的第一天呢,我们就已经接触了委托,例如当双击button产生button1_click,这个呢,是对button1点击事件的处理方法,至于委托和订阅事件,就悄悄的写在你看不到的地方。好了,今天就来总结一下这个委托,看看它到底怎么运作的,它的书写步骤和注意事项又有哪些。讲之前还是声明一下,不管文章喜不喜欢,在别人看来是好还是烂,毕竟我写的,转载的话请尊重一下作者的劳动成果,保留作者信息及文章出处 http://www.cnblogs.com/MyateJx/p/3534885.html 。
【正文】
委托的关键组件有以下几个:
定义委托
定义事件(定义该委托类型的事件)
处理方法(定义对该事件的处理方法)
订阅事件(关联事件和处理方法)
书写步骤是:
定义被监控者的类,包括声明字段、构造函数、属性、以及要被监控的方法),例如:
public class YuanGong
{
string _name;
int _num; public YuanGong(string nm, int num)
{
_name = nm;
_num = num;
} public string Name
{
get { return _name; }
set { _name = value; }
} public int Num
{
get { return _num; }
set { _num = value; }
} public void 作死()
{
Console.WriteLine("嗯,我要作死了!");
} }
定义被监控者的类
定义一个继承EventArgs的参数类,包括声明字段、属性,和被监控者类是保持一致的。例如:
public class YgEventArgs:EventArgs
{
string _name;
int _num; public string Name
{
get { return _name; }
set { _name = value; }
} public int Num
{
get { return _num; }
set { _num = value; }
}
}
定义参数类
定义一个带参的委托。例如:
public delegate void JianShi(object sender,YgEventArgs e);
在被监控者的类中定义一个该委托类型的事件。例如:
public event JianShi ZUOSI;
在要被监控的方法中实例化一个参数类对象e,并以带参的方式插入上述事件。例如:
public void zuosi()
{
Console.WriteLine("嗯,我要作死了!");
YgEventArgs e = new YgEventArgs();
e.Name = _name;
e.Num = _num; ZUOSI(this,e);
}
实例化参数并安插监控事件
定义一个监控者的类,包括对上述事件的处理方法,注意方法的返回值、形参表要和委托保持一致。例如:
public class ChuLi
{
public void chuli(object sender,YgEventArgs e)
{
Console.WriteLine("WTF,{0}在{1}作死了!",e.Name,e.Num);
}
}
定义一个监控者类并设置处理方法
在主函数中实例化一个被监控者和一个监控者。
订阅事件。
调用被监控者要被监控的方法。例如:
static void Main(string[] args)
{
YuanGong yg = new YuanGong("MyateJx", );
ChuLi cl = new ChuLi(); yg.ZUOSI+=new JianShi(cl.chuli); yg.zuosi(); Console.ReadLine(); }
订阅事件 触发事件
以上就是一个完完整整的委托处理。
那么回过头来思考一下我们的button1,双击button1的时候,在Form1.cs中生成了button1_click的处理方法,而button1点击的事件在哪呢?这个是在Button类中已经声明的了。那么委托呢?委托就是默认的EventArgs,订阅事件呢,在Form1.Designer.cs中有写:
this.button1.Click += new System.EventHandler(this.button1_Click);
所以呢,可视化的VS编辑器就是这样,允许你只写处理方法,剩下的都交给它来办。如果你要自己写委托呢,就可以摘取上述步骤中的监控者类,也就是自己写一个监控者类,然后写一个订阅事件with监控者类中的处理方法,这样呢,就可以达到你想要的效果。
【总结】C# 设置委托的机理和简要步骤的更多相关文章
- ios 设置委托delegate
为了进行页面传值,也可以用委托的方法. 下面以时间控件为例. 1.首先,在.h 文件设置委托 #import <UIKit/UIKit.h> @protocol DatePickerVie ...
- .NET Core 跨平台物联网开发:设置委托事件(二)
系列教程目录 (一) 连接阿里云IOT (二) 设置委托事件 (三) 上报属性 (四) SDK文档 属性.方法.委托.类 http://pan.whuanle.cn/index.php?dir=up ...
- Linux——【转】gcc编译与gdb调试简要步骤
原文:gcc编译与gdb调试简要步骤 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定义和include文件展开等工作:(.i) l 根据编译参数进行不同程 ...
- 创建CrawlSpider爬虫简要步骤
创建CrawlSpider爬虫简要步骤: 1. 创建项目文件: e.g: scrapy startproject douyu (douyu为项目名自定义) 2. 进入项目文件: e.g: cd dou ...
- 【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错
原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的 ...
- MySQL Server 的安装方法及简要步骤
闲扯两句: 小弟不才,由于缺乏明确的职业规划,初毕业的那两年从事的是网络管理工作,接触最多的是计算机硬件和网络设备. 近几年才开始转向DB行业,最初是自学,过程中走了不少弯路,后来参加的专职的DBA培 ...
- 搭建Android开发环境简要步骤
(一)安装JDK JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html 在Linux终端输入如下命令,设 ...
- gcc编译与gdb调试简要步骤
http://blog.chinaunix.net/uid-24103300-id-108248.html 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定 ...
- Syslinux编译环境配置简要步骤
由于毕业设计要做一个加密U盘的LINUX,需要修改一sysylinux引导程序,在网上很少有关于syslinux编译环境配置的文章,在此简要总结一下,发出来共享. 需要的软件: 1. vmware ...
随机推荐
- Spark基础知识汇总
2,wordcount: val wordcount = sc.textFile()).reduceByKey(_ + _).sortByKey().collect val wordcount = s ...
- linux查看安装文件
rpm -qa jdk 查看名字包含"jdk"的已安装的文件 which java 查看java命令的所在目录 rpm -qf `which java` 查看java命令所对应的安 ...
- Windows 网络通讯开发
Windows 网络通讯开发 一.Windows网络开发API 由于C++标准库中没有网络库,所以进行网络开发的时候要调用系统API.Windows通讯开发API包括以下几个基本函数及成员类型: 1. ...
- ServiceStack.Redis订阅发布服务的调用(Z)
1.Redis订阅发布介绍Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式.发布者和订阅者之间使用频 ...
- gnu coreutils-8.25 for win32 static - Beta
gnu.win32-coreutils-8.25.7z 2.7 Mb bc-1.06.tar.gz coreutils-8.25.tar.xz diffutils-3.5.tar.xz gawk-4. ...
- cocos2d-x宏定义
1 ccp : The "ccp" prefix means: "CoCos2d Point" //查看: ../cocos2d-x-2.2/cocos2dx/ ...
- main 返回值
int main() 在c中表示返回值时int:也可以不明确给出返回值,默认为int:()表示接受任何参数,main(void)表示不接受任何参数.main(),int main(),main(voi ...
- Easyui 去掉datagrid 行的样式,并点击checked 改边行颜色!
--最近客户提出的需求 全选高亮样式太丑,每行选中不需要背景图片颜色,字体变黑色,未选中变灰色. 先把代码和改变后的图片 贴出来. /* 初始化DataFrid数据 */ initDataGrid: ...
- django学习记录
1.参考资料问题: 现在django发布了1.11版本,离线文档下载引擎地址 文档下载地址 在线文档:https://docs.djangoproject.com/en/1.10/intro/tuto ...
- Toad for Sqlserver
# 设置制表符 从sqlserver拷贝的存储过程粘贴到Toad,代码变得不整齐了,这就需要设置下制表符的大小.