`
webcode
  • 浏览: 5957332 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

事件委托使用步骤与顺序

 
阅读更多

也许明白了委托的特点后,你会发现它其实还是瞒有用的的:
1 多播(Mulit Cast)
2 异步操作 (Async)


实际的委托用处
1、跨线程调用窗体控件必须使用委托。
2、子窗体父窗口动态传值的情况需要用到委托
3、多线程同步的时候需要用到委托
4、自定义事件的时候必须用到委托
……用长了你就会发现委托非常好用也很有用处,感触就是另一段代码需要让这一段代码执行而不是执行这一段代码的时候要用到委托。

委托 delegate是只有一个函数的特殊的类
委托对象的引用相当函数指针
delegate 声明定义一种引用类型,该类型可用于将方法用特定的签名封装。委托实例封装静态方法或实例方法。委托大致类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。
委托使您得以将函数作为参数传递。委托的类型安全要求作为委托传递的函数拥有同委托声明相同的签名
使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给某个方法,而不必在编译时知道将调用哪个方法。与 C 或 C++ 中的函数指针不同,委托是面向对象、类型安全的
委托声明定义一种类型,它用一组特定的参数以及返回类型封装方法。对于静态方法,委托对象封装要调用的方法。对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。
委托的一个有趣且有用的属性是,它不知道或不关心自己引用的对象的类。任何对象都可以;只是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。这使得委托完全适合“匿名”调用
class Program
{
delegate bool CompareOp(int v1, int v2);
static void Main(string[] args)
{
CompareOp less = new CompareOp(Program.Less);
Console.WriteLine(less(1, 2).ToString());
Console.WriteLine("Test Delegate");
Console.ReadLine();
}
static public bool Less(int a, int b)
{
return a < b;
}
}

//2
delegate void MyDelegate(int i);
class Program
{
public static void Main()
{
TakesADelegate(new MyDelegate(DelegateFunction));
}
public static void TakesADelegate(MyDelegate SomeFunction)
{
SomeFunction(21);
}
public static void DelegateFunction(int i)
{
System.Console.WriteLine("Called by delegate with number: {0}.", i);
}
}


事件:事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。

在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型(Delegate),该类型提供函数指针的功能。

委托:委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。


事件的实现就是一个函数,而委托的定义关键地方就说委托是函数指针,那么指向这个事件实现的函数指针就可以理解为委托而事件就是通过委托来动作的,下面给出事件的产生通过委托来动作的步骤:

1:首先定义委托

public delegate void dele();

实际上就是定义了一个函数指针,从这个定义看出这个函数是返回值类型为void的无参数的函数;

2:定义事件

public Event dele event;

定义了事件,事件的类型就是这个委托。

3:定义事件动作

public void EventOperator()

{

System.Windows.Forms.MessageBox("事件动作!");

}

4:将事件与动作关联(介质就是委托哦)

event +=new dele(EvventOperator);

5:触发事件

event ();

结果就是弹出MesssageBox显示“事件动作”!

同一个事件动作可以对应多个事件,只需要将这些事件委托(看到了吧委托这个词多么的形象:))到这个事件动作上就可以,当这些事件发生的时候都会触发这个动作。

分享到:
评论

相关推荐

    C# 委托实例(子窗体操作主窗体),本人亲测可用.zip

    C#子窗体操作主窗体例程,使用委托,代码为本人亲自编写,一共6个步骤,步骤先后顺序很详细,亲测可用,仅需1积分。欢迎下载和收藏

    C#面向对象程序设计案例教程

    3.1 顺序与选择结构 3.1.1 案例说明 3.1.2 代码及分析 3.1.3 相关知识及注意事项 3.2 选择结构的窗体应用 3.2.1 案例说明 3.2.2 案例实现步骤 3.2.3 代码及分析 3.2.4 相关知识及注意事项 3.3 while、do....

    jquery插件使用方法大全

    这一版正式支持事件委托特性。 jQuery 1.3.2(2009年2月):这次小版本升级进一步提升了库的性能,例如改进了:visible/:hidden选择符、.height()/.width()方法的底层处理机制。另外,也支持查询的元素按文档顺序返回...

    亮剑.NET深入体验与实战精要3

    4.5.3 委托与事件传递 179 4.6 实现个性化窗体界面 181 4.7 无标题窗体拖动的两种方法 183 4.8 让程序只启动一次——单实例运行 184 4.9 实现系统托盘和热键呼出 185 4.10 进程与多线程的区别 190 4.11 创建多线程...

    亮剑.NET深入体验与实战精要2

    4.5.3 委托与事件传递 179 4.6 实现个性化窗体界面 181 4.7 无标题窗体拖动的两种方法 183 4.8 让程序只启动一次——单实例运行 184 4.9 实现系统托盘和热键呼出 185 4.10 进程与多线程的区别 190 4.11 创建多线程...

    Visual Basic 6编程技术大全 中译本扫描版带书签 2/2

    第7章事件、多态性与继承性232 7.1事件232 7.1.1事件和代码复用性232 7.1.2事件的语法233 7.1.3第一个完整的示例程序234 7.1.4改进示例程序238 7.1.5多点传送244 7.2多态性249 7.2.1多态性的影响249 7.2.2使用界面...

    Visual Basic 6编程技术大全 中译本扫描版带书签 1/2

    第7章事件、多态性与继承性232 7.1事件232 7.1.1事件和代码复用性232 7.1.2事件的语法233 7.1.3第一个完整的示例程序234 7.1.4改进示例程序238 7.1.5多点传送244 7.2多态性249 7.2.1多态性的影响249 7.2.2使用界面...

    软件工程文档模板大全(包含14份文档)

    非常全名,包括14分文档,包括有 可行性研究报告模版、详细设计说明书模版、程序维护手册模版、软件修改报告模版、软件...【按文件名字母顺序或按功能与模块分类顺序逐个列出文件名称、标识符及说明。】 9.用户操作举例

    软件资料文档标准规格

     ● 数据格式:如长度、格式基准、标号、顺序、分隔符、词汇表、省略和重复、控制。  ● 输入举例。 4.3 输出:给出每项输出数据的说明。  ● 数据背景:说明输出数据的去向、使用频度、存放媒体及质量管理等。...

    研究院HPC建设方案

    4.8.12 管理员工具&gt;&gt;作业委托管理: 统计当前用户自己所提交的作业总数,包含:作业号,作业名称,具体用户,使用的软件,使用节点数,作业状态等信息,用户可以把自己的一部分作业或所有作业委托给其他用户. 53 4.8.13 管理...

    c#学习笔记.txt

    在 C 或 C 中与委托最接近的是函数指针,但函数指针只能引用静态函数,而委托可以同时引用静态方法和实例方法。在后一种情况中,委托不仅存储对方法入口点的引用,还存储对调用其方法的对象的引用。与 C 函数指针...

    通达OA2010 3.6.110712 补丁自动升级-纯净版

    修正工作流工作委托中委托记录步骤名称不正确的问题 修正工作流列表控件中如果有换行,则不能正确填写的问题 修正工作流报表由特殊控件引起的SQL报错的问题 修正工作流选择人员按角色选择不显示用户辅助角色的...

    asp.net知识库

    在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中...

    计算机软件质量保证规范

    必须列出在该软件的开发、验证与确认以及使用与维护等阶段中需要编制的文档,并描述对文档进行评审与检查的准则。 4.3.1 基本文档 为了确保软件的实现满足需求,至少需要下列基本文档: 4.3.1.1 软件需求规格说明...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    8.1.3 析构函数与动态内存分配 366 8.2 实现复制构造函数 369 8.3 在变量之间共享内存 370 8.3.1 定义联合 371 8.3.2 匿名联合 372 8.3.3 类和结构中的联合 372 8.4 运算符重载 373 8.4.1 实现重载的运算符 ...

    Spring面试题

    BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 ☆ Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如...

    Visual C++ 2005入门经典--源代码及课后练习答案

    9.9.6 委托和事件 502 9.9.7 引用类的析构函数和结束函数 514 9.9.8 通用类 516 9.10 小结 527 9.11 练习 528 第10章 调试技术 531 10.1 理解调试 531 10.1.1 程序故障 532 10.1.2 常见故障 533 ...

    数据库系统应用开发方法.pdf

    开发⽅案:是否委托开发,选⽤什么模型。 完成分析后,应形成相应的数据库应⽤系统开发可⾏性研究报告,交给管理部门评审。 3.项⽬规划 确定项⽬⽬标和范围。 分析和定义⼯作活动和任务。 估算规模和所需资源。 ...

    最新Java面试宝典pdf版

    11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&gt;(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax部分 82 1. 判断第二个日期比第一...

Global site tag (gtag.js) - Google Analytics