委托与事件初探
2011-10-25 15:15
323 查看
一言以蔽之:
委托是指将一个方法作为参数传递给另外一个参数,它实现起来极其类似于一个类,而实际上它是一个特殊的类。
事件是一种特殊的委托,是委托的实例。
委托的使用:
Note:使用委托的全过程与使用一个类的全过程完全相同。同样需要先定义一个类,然后调用的时候实例化等等。
example:
namespace DelegateDemo
{
class Program
{
public delegate void GreetDelegate(string name);//先定义委托
private static void EnglishGreet(string name)//定义两个方法
{
Console.WriteLine("Hello," + name);
}
private static void ChineseGreet(string name)
{
Console.WriteLine("你好," + name);
}
private static void Greet(string name, GreetDelegate MakeGreet)//定义使用委托的方法
{
MakeGreet(name);
}
static void Main(string[] args)
{
GreetDelegate gd = new GreetDelegate(EnglishGreet);
gd += ChineseGreet;
Greet("Jay-Z", EnglishGreet); ;
Greet("亦非寻常", ChineseGreet);
Console.WriteLine("");//注意上下两种委托的初始化方式。
//可以想象成类的初始化,只不过构造函数默认是带有一个参数的。
GreetDelegate gd1 = EnglishGreet;
gd1 += ChineseGreet;
Greet("James", EnglishGreet); ;
Greet("小明", ChineseGreet);
Console.ReadKey();
}
}
}
输出:
Hello,Jay-Z
你好,亦非寻常
Hello,James
你好,小明
事件的使用:
Note:事件是基于EventHandle委托和EventArgs类。
一般事件的使用经历以下几个步骤:
1.先定义一个委托。
public delegate void 委托名(Object sender,EventArgs e);//Note:按照.Net规范,委托名以EventHandle结尾。
2.定义一个事件字段。
public Event 委托名 事件名;//Note:按照.Net规范,事件名以Event结尾。
3.最后创建方法,触发事件。
example:
namespace EventDemo
{
public partial class Form1 : Form
{
//1.public delegate void BtnEventHandle(Object sender, EventArgs e);//先定义委托
//2.public event BtnEventHandle BtnClick;//定义事件
public Form1()
{
InitializeComponent();
button1.Click+=new EventHandler(button1_Click);//这里的委托实际上已经创建好了,一般而言Winform
//控件中事件是已经注册好的,委托都是EventHandle
}
private void button1_Click(Object sender, EventArgs e)
{
MessageBox.Show("这是由Button1触发的Event", "EventDemo", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
最后结果如下:
转自:http://www.cnblogs.com/itcat1990/archive/2011/06/09/2076706.html
委托是指将一个方法作为参数传递给另外一个参数,它实现起来极其类似于一个类,而实际上它是一个特殊的类。
事件是一种特殊的委托,是委托的实例。
委托的使用:
Note:使用委托的全过程与使用一个类的全过程完全相同。同样需要先定义一个类,然后调用的时候实例化等等。
example:
namespace DelegateDemo
{
class Program
{
public delegate void GreetDelegate(string name);//先定义委托
private static void EnglishGreet(string name)//定义两个方法
{
Console.WriteLine("Hello," + name);
}
private static void ChineseGreet(string name)
{
Console.WriteLine("你好," + name);
}
private static void Greet(string name, GreetDelegate MakeGreet)//定义使用委托的方法
{
MakeGreet(name);
}
static void Main(string[] args)
{
GreetDelegate gd = new GreetDelegate(EnglishGreet);
gd += ChineseGreet;
Greet("Jay-Z", EnglishGreet); ;
Greet("亦非寻常", ChineseGreet);
Console.WriteLine("");//注意上下两种委托的初始化方式。
//可以想象成类的初始化,只不过构造函数默认是带有一个参数的。
GreetDelegate gd1 = EnglishGreet;
gd1 += ChineseGreet;
Greet("James", EnglishGreet); ;
Greet("小明", ChineseGreet);
Console.ReadKey();
}
}
}
输出:
Hello,Jay-Z
你好,亦非寻常
Hello,James
你好,小明
事件的使用:
Note:事件是基于EventHandle委托和EventArgs类。
一般事件的使用经历以下几个步骤:
1.先定义一个委托。
public delegate void 委托名(Object sender,EventArgs e);//Note:按照.Net规范,委托名以EventHandle结尾。
2.定义一个事件字段。
public Event 委托名 事件名;//Note:按照.Net规范,事件名以Event结尾。
3.最后创建方法,触发事件。
example:
namespace EventDemo
{
public partial class Form1 : Form
{
//1.public delegate void BtnEventHandle(Object sender, EventArgs e);//先定义委托
//2.public event BtnEventHandle BtnClick;//定义事件
public Form1()
{
InitializeComponent();
button1.Click+=new EventHandler(button1_Click);//这里的委托实际上已经创建好了,一般而言Winform
//控件中事件是已经注册好的,委托都是EventHandle
}
private void button1_Click(Object sender, EventArgs e)
{
MessageBox.Show("这是由Button1触发的Event", "EventDemo", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
最后结果如下:
转自:http://www.cnblogs.com/itcat1990/archive/2011/06/09/2076706.html
相关文章推荐
- 委托与事件初探
- 事件冒泡、事件捕获、事件委托初探
- 委托与事件初探
- 委托与事件初探 推荐
- C#的委托与事件初探
- [转]大白话系列之C#委托与事件讲解(二)
- unityTaidou(五)unity中委托事件
- js中的事件委托
- 转载: jQuery事件委托( bind() \ live() \ delegate()) [委托 和 绑定的故事]
- 事件(多路委托、事件)
- 通过委托与事件监听状态改变来更新UI
- DOM的默认事件、事件模型、事件委托、阻止默认事件、冒泡事件的方式等。
- C# 中的委托和事件
- C#编程之委托与事件(二)
- 简化C#中的委托和事件
- 关于事件与委托的一些个人简单理解
- 对C#下函数,委托,事件的一点理解!
- 用 C++ 实现 C# 中的 委托/事件 (1-delegateEMU.cpp)
- <转载>大白话系列之C#委托与事件讲解大结局
- Unity3D中使用委托和事件