委托与事件
来源:互联网 发布:linux cat怎么退出 编辑:程序博客网 时间:2024/06/01 14:39
一.委托
委托使用分三步:1.委托声明。2.委托实例化。3.委托调用。
例程一:
using System;
namespace 委托
{
delegate int WeiTuo(int a,int b); //第一步:委托声明
class Class1
{
static void Main(string[ ] args)
{
Class1 c1=new Class1();
WeiTuo w=new WeiTuo(c1.Add); //委托实例化
Console.WriteLine(w(1,2)); //委托调用
}
private int Add(int x,int y)
{
return x+y;
}
}
}
例中委托w引用了方法Add。
委托声明了以后,就可以像类一样进行实例化,实例化时把要引用的方法做为参数,
这样委托和方法就关联起来了,就可以用委托来引用方法了。
委托和所引用的方法必须保持一致:
1.参数个数,类型,顺序必须完全一致。
2.返回值必须一致。
二.事件
有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎么联系起来的呢?委托就是他们
中间的桥梁,事件发生时,委托会知道,然后将事件传递给处理方法,处理方法进行相应处理。
比如在WinForm中最常见的是按钮的Click事件,它是这样委托的:
button1.Click+=new EventHandler(button_Click);按下按钮后就会触发button1_Click方法进行处理。
EventHandler就是系统类库里已经声明的一个委托。
三.自定义事件及其处理
EventHandler以及其它自定义的事件委托都是一类特殊的委托,他们有相同的形式:
delegate void 事件委托名(object sender, EventArgs e);
object用来传递事件的发生者,比如二中的Button控件就是一个事件发生者;EventArgs用来传递事件的细节。I
例程二:
using System;
namespace 最简单的自定义事件
{
// 事件发送类
class Class1
{
public delegate void UserRequest(object sender, EventArgs e); // 声明委托
public event UserRequest OnUserRequest; // 定义一个委托类型的事件
public void run()
{
OnUserRequest(this, new EventArgs()); // 产生事件
}
}
class Class2
{
static void Main(string [ ] args)
{
Class1 c1=new Class1();
c1.OnUserRequest+=new Class1.UserRequest(c1_OnUserRequest); // 委托实例化后绑定到事件
c1.run();
}
public static void c1_OnUserRequest(object sender, EventArgs e)
{
// 事件处理方法
Console.WriteLine("你触发了事件!");
}
}
}
例程三:
using System;
namespace 带事件数据的事件
{
// 带事件数据的事件类,从EventArgs继承
class OnUserRequestEventArgs : EventArgs
{
public string inputText;
}
class Class1
{
// 事件发送类
public delegate void UserRequest(object sender,OnUserRequestEventArgs e); // 声明委托
public event UserRequest OnUserRequest; // 定义一个委托类型的事件
public run()
{
OnUserRequestEventArgs e1 = new OnUserRequestEventArgs( );
e1.InputText = a;
OnUserRequest(this,e1);
}
}
class Class2
{
// 事件接收类
static void Main(string[ ] args)
{
Class1 c1 = new Class1();
c1.OnUserRequest += new Class1.UserRequest(c1_OnUserRequest);
c1.run();
}
private static void c1_OnUserRequest(object sender, OnUserRequestEventArgs e)
{
Console.WriteLine("/t你输入的是:"+e.InputText);
}
}
}
例程三跟例程二唯一的差别在于自定义了一个类OnUserRequestEventArgs,从EventArgs继承。
- 委托入门-事件与委托
- 委托与事件
- 委托与事件
- c# 委托与事件
- 委托与事件
- 事件与委托详解
- 委托与事件详解
- 委托与事件详解
- 委托与事件
- C#委托与事件
- 委托与事件
- 委托与事件
- 事件与委托趣谈
- 事件与委托
- 事件与委托趣谈
- 事件与委托
- 事件与委托趣谈
- 事件与委托趣谈
- 关于无法显示该网页,弹出对话框显示"Internet Explorer无法打开Internet站点xxx,已终止操作"问题的解决方法
- 三年总结
- 想充实自己 好好努力
- 获取mysql的表注释和字段注释
- CMMI认证
- 委托与事件
- 轻松彻底对付桌面无法删除的恶意IE快捷方式
- LINQ to Objects
- 数据库 基础连接 JAVA
- 汇总了几个比较有用的SQL Server系统表,内容摘自联机帮助
- Web内容挖掘在数字图书馆中的应用
- ie浏览器状态栏的进度条
- 语义网(Semantic Web)
- Caching Application Block Hands-On Lab(使用缓存)