我终于用到了委托
左直拳
。NET带来了一些新的东西,其中委托是一个。
我总觉得委托很神秘,比较难理解。看帮助,查资料,不是语焉不详,就是故弄玄虚,越看越糊涂。有时候,真有点怀疑网上写文章的这些人自己是否真的弄清楚了。
后来编码的时候用到了一下,总算有了点认识。一言以蔽之,委托的作用是使得函数可以当作参数和变量来使用。(今天又查了一下帮助,里面说委托作用类似于“ C++ 中函数指针”,因为我对函数指针不熟,所以,惭愧,怪不得之前不明白)。不过这个函数,其返回值、参数都要跟委托声明的一致才行。就好象螺丝孔,不是所有的螺丝钉都能拧进去,要尺寸大小合适才可以。
定义和使用委托分三个步骤:声明、实例化和调用。举例说明。
假设我们要写一段代码,实现“见人说人话尽人事,见鬼说鬼话怀鬼胎”的功能,怎么办呢?
先实现说话和做事函数。
void SpeakAsHuman() {}//有一说一,说出人话
void SpeakAsGhost{}//经过大脑复杂运算,说出鬼话
void DoAsHuman(){};//尽人事
void DoAsGhost(){};//怀鬼胎
然后使用委托来引用这些函数
//声明一个委托
delegate void myDelegate();
//构造两个委托实例
myDelegate dlSpeak = null; //说话
myDelegate dlDo = null; //做事
//调用
switch( 遇见谁?)
{
case 人:
//看,函数作为参数或对象用于赋值
//这跟平常构造一个变量有什么不同?如 StringBuilder str = new StringBuilder("Hello World!");
dlSpeak = new myDelegate(SpeakAsHuman);
dlDo =new myDelegate(DoAsHuman);
break;
case 鬼:
dlSpeak = new myDelegate(SpeakAsGhost);
dlDo =new myDelegate(DoAsGhost);
break;
default:
break;
}
这样子处理后,dlSpeak,dlDo在见人或见鬼时,就会有不同的内涵,说话按扭cmdSpeak和做事按扭cmdDo的OnClick事件就容易处理多了:
//点击了说话按扭
private void cmdSpeak_Click(object sender, System.EventArgs e)
{
dlSpeak();
}
//点击了做事按扭
private void cmdDo_Click(object sender, System.EventArgs e)
{
dlDo();
}
可以看见,代码比较简洁,逻辑上也更分明了。对于说话按扭和做事按扭来讲,什么都可以不理会,只须说和做就行,至于说什么,做什么,都已经预先定好。并且这个预先定好不是在开发阶段来设定,而是在运行阶段自行设定,多棒。
假如没有用委托,说话按扭cmdSpeak和做事按扭cmdDo的OnClick事件中肯定要各判断一次,如下:
//点击了说话按扭
private void cmdSpeak_Click(object sender, System.EventArgs e)
{
//调用
switch( 遇见谁?)
{
case 人:
SpeakAsHuman();
break;
case 鬼:
SpeakAsGhost();
break;
default:
break;
}
}
//点击了做事按扭
private void cmdDo_Click(object sender, System.EventArgs e)
{
switch(……
}
上面的代码如果分开,说话及做事定义在一个类文件里,而按扭放在一个页面上,可以想见,利用委托,能够屏蔽许多细节,实现很好的封装性。
委托,也许可以理解为“函数的代理”?
分享到:
相关推荐
# 2 需要用到的部分知识 [《QT(3)-QTableView》](https://blog.csdn.net/qq_40666149/article/details/128215699) [《QT(4)-QAbstractItemView》](https://blog.csdn.net/qq_40666149/article/details/128235025) ...
网络框架中的消息中心也需要用到委托,以便在接收到消息时调用相应的处理方法。随着虚拟现实(VR)技术的发展,委托在如VRTK这样的VR开发工具包中也扮演着重要角色,用于在虚拟环境中的事件处理和对象交互。 接下来...
例如,Windows Forms或WPF中的控件事件(如按钮点击)通常会用到委托。当事件发生时,控件会触发关联的委托,执行所有已注册的事件处理程序: ```csharp button.Click += new EventHandler(Button_Click); private...
创建委托实例需要用到`new`关键字,指定一个与委托类型匹配的方法。如: ```csharp ProcessAnything pa = new ProcessAnything(SomeMethod); ``` 这里的`SomeMethod`必须与`ProcessAnything`的签名相匹配。委托有...
《授权委托书》是法律事务中常见的...例如,在签署软件开发合同、处理数据隐私争议或授权第三方维护IT系统时,都需要用到此类文件。因此,IT专业人员应当熟悉授权委托书的基本格式和内容,以便在需要时能有效地运用。
例如,在Web控件之间进行交互、处理用户输入或响应页面生命周期事件时,都会用到它们。在.NET框架中,控件如Button、TextBox等都提供了大量的事件,如Click事件,我们可以通过添加事件处理程序来响应这些事件: ```...
在IT行业中,虽然不像技术文档那样常见,但在组织内部的项目管理、合同签署或其他需要代表他人行动的情况下,委托书可能会被用到。下面将详细介绍委托书的构成要素、用途及注意事项。 一、委托书的基本结构 1. ...
在IT行业的具体场景中,例如,当一家软件开发公司需要授权给合作伙伴使用其软件技术,或者一个项目经理需要临时授权团队成员处理特定任务时,都会用到授权委托书。通过这样的文书,可以确保业务流程的顺利进行,同时...
【公司委托书】是企业在日常运营中经常需要用到的法律文件,主要用于当企业需要授权某位员工代表公司处理特定事务时。以下是对公司委托书主要内容的详细解释: 1. **委托人**:通常为企业法定代表人或者拥有相应...
在驾驶相关的事务中,有时由于各种原因,个人无法亲自处理,这时就可能需要用到“代领驾驶证委托书”。这个文档主要用于授权他人代表自己领取驾驶证。以下是关于这个主题的详细解释: 1. **委托书定义**:委托书是...
例如,Windows Forms或WPF应用程序中,我们常常会用到`EventHandler<TEventArgs>`这样的委托来处理控件的事件,如按钮点击事件: ```csharp button.Click += new EventHandler(button_Click); ``` 在这里,`button...
在处理如申报债权、办理房产交易、医疗事务等重要事宜时,都需要用到此类文书。因此,公民应当熟悉基本的法律知识,确保自己的权益不被侵犯。同时,如果涉及复杂的法律事务,建议寻求专业律师的帮助,以确保委托书的...
要准备软考的学习了,用C#写的WinForm桌面小程序,计算倒计时提醒自己.也可用于阻击疫情居家隔离...1.小程序用到了窗体间传值的两种方法:构造函数传值 ,委托传值 ,值得初学者学习 2.用到了序列化和反序列化持久化数据
《最新公司委托授权书》是企业在日常运营中经常需要用到的重要法律文件,主要用于授权他人代表公司进行特定事务的处理。在企业运营中,由于各种原因,法定代表人或负责人可能无法亲自处理某些事务,此时就需要出具...
当公司需要与其他组织签订合同、处理财务事务或者参与投标活动时,都需要用到授权委托书。正确填写和使用授权委托书,能够保护公司的权益,避免因未经授权的行动而产生的风险。同时,对于受托人而言,理解自己的权限...
对于IT公司的合同管理、项目合作、财务往来等,都需要用到印章。因此,制定严谨的印章管理制度是必要的,这包括: 1. **印章保管**:印章应由专人妥善保管,防止丢失或滥用。 2. **使用审批**:每次使用印章前,需...
授权委托书是公民个人在日常生活中常常需要用到的一种法律文件,尤其在处理无法亲自到场或不便亲自处理的事务时。此压缩包文件“参考资料-授权委托书(公民个人用).zip”包含了一份“授权委托书(公民个人用).docx...
《纳税人办税授权委托书》是企业在日常税务管理中经常需要用到的重要文件,它涉及到企业对税务事务的管理和法律责任的承担。下面将详细解释这个文件的关键内容及其重要性。 首先,纳税人声明部分,企业需确认表中所...
主要用到xml操作和事件委托。 主要功能: 1、开启即启动显示昨天总结内容,并发送短信给亲友,另其监督 2、每一小时自动弹窗置顶,让你写这一小时的工作学习内容。 3、有周总结和月总结导出功能 4、用xml文件模拟...
在IT行业中,尽管技术本身并不直接涉及委托书合同,但合同的管理和签署过程可能需要用到电子签名、合同管理系统等技术工具,这在企业信息化和数字化进程中是不可或缺的。 在提供的三篇委托书合同中,我们能看到以下...