C#事件 委托 学习笔记
2012-12-05 17:22
267 查看
事件是种特殊的委托
分为:事件, 委托, 事件委托
其中事件和事件委托的参数一般是固定格式:(object sender, EventArgs e),
但是可以通过继承EventArgs类来改为自定义的参数。
1 事件实例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 事件2
{
public partial class Form1 : Form
{
private event EventHandler MyEvent; //1 声明一个事件
public Form1() //Form1构造函数
{
InitializeComponent();
MyEvent += new EventHandler(OnMyEvent); //3 添加事件处理
}
private void button1_Click(object sender, EventArgs e)
{
MyEvent(sender, null); //4 触发事件
}
public void OnMyEvent(object sender, EventArgs e) //2 事件处理函数, 参数固定格式
{
MessageBox.Show("OnMyEvent !");
}
}
}
步骤:
①声明一个事件: [修饰符] event EventHandler eventName;
注意:当是 事件委托 的时候,上句的EventHandler就要改为相应的委托名字,而事件委托对应的 委托 的“原型”以及对应的函数原型的参数就要为(object sender, EventArgs e)的形式(现阶段)。
②写一个事件处理函数
[修饰符] 返回值类型 FuncName(object sender, EventArgs e);
注意这里函数原型的参数!
③绑定事件和对应的事件处理函数
eventName += new EventHandler(FuncName);
④触发事件
eventName(sender, e);
这里的实参sender和e根据实际情况来。
---------------------------------------------------------------------------------------------
2 委托实例
委托非常类似于函数指针,当然这里的委托是安全的。
先来回顾一下函数指针:
int Function(int a, char b) //函数定义
{
//codes
return 0;
}
int (*PFunc)(int a, char b); //声明函数指针,返回值和参数和对应的函数一致
PFunc = Function; //函数指针赋值, 函数名即为地址(指针)
PFunc(1, 'a'); //调用函数指针
--------
委托:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 委托2
{
public partial class Form1 : Form
{
private delegate void MyDelegate(int a, char b); //1 声明一个委托
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyDelegate myd = new MyDelegate(OnMyDelegate); //3 定义一个委托对象myd
myd(10, 'c'); //4 调用
}
public void OnMyDelegate(int a, char b) //2 委托对应的函数
{
MessageBox.Show("OnMyDelegate !");
}
}
}
步骤:
①声明一个委托
[修饰符] delegate 返回值 DelegateName(参数s);
注意:上句里的 参数s 一定要和对应的函数一致(返回值, 参数个数,参数类型)
②定义委托函数
[修饰符] 返回值 FunctionName(参数s)
{
//codes
}
③创建委托对象
DelegateName dgObj = new DelegateName(FuncName);
④调用
dgObj(实参s);
---------------------------------------------------------------------------------------------
3 事件委托
需要注意的地方很多
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 事件委托3
{
public partial class Form1 : Form
{
private delegate void MyEventHandler(object sender, EventArgs e); //1 声明一个委托,注意 参数!
private event MyEventHandler MyEvent; //2 声明一个事件,注意MyEventHandler!
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyEvent += new MyEventHandler(OnMyEvent); //4 绑定事件 委托
MyEvent(sender, null); //5 调用委托
}
public void OnMyEvent(object sender, EventArgs e) //3 事件处理函数
{
MessageBox.Show("OnMyEvent !");
}
}
}
注意:
事件委托和 事件的不同之处:
声明事件时event后面“关键字”不一样,事件:event后面的EventHandler是个关键字,
而 事件委托:event后面的是声明的委托,即本例中下划线的MyEventHandler。
相同的地方就是:对应的事件处理函数的参数都是(object sender, EventArgs e)
步骤:
①声明一个委托
[修饰符] delegate 返回值类型 DelegateNameEventHandler(object sender, EventArgs e);
注意:这里的委托对应的“函数原型”的参数就不和第二部分中的一样了,该委托的函数原型的参数必须为(object sender, EventArgs e), 当然只是现阶段,也就是没有考虑自定义参数之前这样是必须的。
②声明一个事件
[修饰符] event DelegateNameEventHandler eventName;
注意:event是个关键字
③定义一个事件处理函数
[修饰符] 返回值类型 OnDelegateName(object sender, EventArgs e)
{
//codes
}
注意:参数!!
④新建事件对象 并 绑定事件处理函数
eventName += new DelegateNameEventHandler(OnDelegateName);
注意:事件 和 事件委托的情况下 都是 +=, "+="用来表示加入事件队列,"-="表示从事件队列中拿走这个事件。
⑤触发事件
eventName(sender, e);
注意:这里的参数sender 和 e 根据实际情况来。
上述说的都是基于:没有使用事件自定义参数的请!
分为:事件, 委托, 事件委托
其中事件和事件委托的参数一般是固定格式:(object sender, EventArgs e),
但是可以通过继承EventArgs类来改为自定义的参数。
1 事件实例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 事件2
{
public partial class Form1 : Form
{
private event EventHandler MyEvent; //1 声明一个事件
public Form1() //Form1构造函数
{
InitializeComponent();
MyEvent += new EventHandler(OnMyEvent); //3 添加事件处理
}
private void button1_Click(object sender, EventArgs e)
{
MyEvent(sender, null); //4 触发事件
}
public void OnMyEvent(object sender, EventArgs e) //2 事件处理函数, 参数固定格式
{
MessageBox.Show("OnMyEvent !");
}
}
}
步骤:
①声明一个事件: [修饰符] event EventHandler eventName;
注意:当是 事件委托 的时候,上句的EventHandler就要改为相应的委托名字,而事件委托对应的 委托 的“原型”以及对应的函数原型的参数就要为(object sender, EventArgs e)的形式(现阶段)。
②写一个事件处理函数
[修饰符] 返回值类型 FuncName(object sender, EventArgs e);
注意这里函数原型的参数!
③绑定事件和对应的事件处理函数
eventName += new EventHandler(FuncName);
④触发事件
eventName(sender, e);
这里的实参sender和e根据实际情况来。
---------------------------------------------------------------------------------------------
2 委托实例
委托非常类似于函数指针,当然这里的委托是安全的。
先来回顾一下函数指针:
int Function(int a, char b) //函数定义
{
//codes
return 0;
}
int (*PFunc)(int a, char b); //声明函数指针,返回值和参数和对应的函数一致
PFunc = Function; //函数指针赋值, 函数名即为地址(指针)
PFunc(1, 'a'); //调用函数指针
--------
委托:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 委托2
{
public partial class Form1 : Form
{
private delegate void MyDelegate(int a, char b); //1 声明一个委托
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyDelegate myd = new MyDelegate(OnMyDelegate); //3 定义一个委托对象myd
myd(10, 'c'); //4 调用
}
public void OnMyDelegate(int a, char b) //2 委托对应的函数
{
MessageBox.Show("OnMyDelegate !");
}
}
}
步骤:
①声明一个委托
[修饰符] delegate 返回值 DelegateName(参数s);
注意:上句里的 参数s 一定要和对应的函数一致(返回值, 参数个数,参数类型)
②定义委托函数
[修饰符] 返回值 FunctionName(参数s)
{
//codes
}
③创建委托对象
DelegateName dgObj = new DelegateName(FuncName);
④调用
dgObj(实参s);
---------------------------------------------------------------------------------------------
3 事件委托
需要注意的地方很多
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 事件委托3
{
public partial class Form1 : Form
{
private delegate void MyEventHandler(object sender, EventArgs e); //1 声明一个委托,注意 参数!
private event MyEventHandler MyEvent; //2 声明一个事件,注意MyEventHandler!
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyEvent += new MyEventHandler(OnMyEvent); //4 绑定事件 委托
MyEvent(sender, null); //5 调用委托
}
public void OnMyEvent(object sender, EventArgs e) //3 事件处理函数
{
MessageBox.Show("OnMyEvent !");
}
}
}
注意:
事件委托和 事件的不同之处:
声明事件时event后面“关键字”不一样,事件:event后面的EventHandler是个关键字,
而 事件委托:event后面的是声明的委托,即本例中下划线的MyEventHandler。
相同的地方就是:对应的事件处理函数的参数都是(object sender, EventArgs e)
步骤:
①声明一个委托
[修饰符] delegate 返回值类型 DelegateNameEventHandler(object sender, EventArgs e);
注意:这里的委托对应的“函数原型”的参数就不和第二部分中的一样了,该委托的函数原型的参数必须为(object sender, EventArgs e), 当然只是现阶段,也就是没有考虑自定义参数之前这样是必须的。
②声明一个事件
[修饰符] event DelegateNameEventHandler eventName;
注意:event是个关键字
③定义一个事件处理函数
[修饰符] 返回值类型 OnDelegateName(object sender, EventArgs e)
{
//codes
}
注意:参数!!
④新建事件对象 并 绑定事件处理函数
eventName += new DelegateNameEventHandler(OnDelegateName);
注意:事件 和 事件委托的情况下 都是 +=, "+="用来表示加入事件队列,"-="表示从事件队列中拿走这个事件。
⑤触发事件
eventName(sender, e);
注意:这里的参数sender 和 e 根据实际情况来。
上述说的都是基于:没有使用事件自定义参数的请!
相关文章推荐
- C#学习笔记(三)—–C#高级特性中的委托与事件(下)
- 学习笔记之---C#中的委托与事件
- 学习笔记之---C#中的委托与事件
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同.
- C#学习笔记之三:C#接口与事件委托
- 《C#高级编程》学习笔记------C#中的委托和事件(续)
- 精通C#学习笔记之事件(一)使用委托的弊端
- C#学习笔记 委托和事件
- C#委托与事件学习笔记
- C#委托,事件最初浅的和最易看懂的学习笔记
- C#学习笔记--详解委托,事件与回调函数
- [C#]C#学习笔记-委托,事件
- C#学习笔记19-委托和事件
- 【unity3d-C#学习笔记】C#中的委托和事件
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同.
- C#学习笔记8——C# 中的委托和事件
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同
- [学习笔记]c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
- 《C#高级编程》学习笔记------C#中的事件和委托
- C#与.NET4 高级程序设计-----委托、事件 学习笔记