委托
是C#中的一种引用类型,类似于C/C++中的函数指针(一个c++函数在编译时被分配给一个入口地址,这个入口地址就称为函数的指针)。
是C#中的一种引用类型,类似于C/C++中的函数指针(一个c++函数在编译时被分配给一个入口地址,这个入口地址就称为函数的指针)。
委托是一个特殊的类,类的实例是对象,但委托的实例没有专门的名称。
声明一个委托:
public delegate void my_delegate_1(Object sender, EventArgs e);
产生委托的实例:
public delegate int my_delegate_2(int x,int y);
class math_class
{
public int sub(int x, int y)
{
return(x+y);
}
}
my_delegate_2 del_example_1 = new my_delegate_2(math_class.sub);
接下来可以直接使用del_example_1调用sub方法了:
del_example_1(23,7)
事件
委托的最基本的一个用处就是用于事件处理。
在类中声明一个事件成员一般采用如下的语法形式:
public event 委托名 事件名
事件的定义用关键字event声明,不过声明事件之前必须存在一个多路广播委托:
public delegate void my_delegate_3(int x,int y);
//返回值为void的委托自动成为多路广播委托.
声明事件:
public event my_delegate_3 my_event_1;
如在Control类中声明了一个Click事件成员,其语法如下:
public event EventHandler Click;
Eventhandler是一个delegate类型,其在类库中声明如下:
public delegate void EventHandler(object sender,EventArgs e);
这样,所有形如:
void 函娄名(object 参数名,EventArgs 参数名);
的函数都可以作为Control类的Click事件响应方法了。
其中第一个参数指明了触发该事件的对象即sender,由于引发事件的对象不可预知的,因此我们把其声明成为object类型,所有的对象都适用。
第二个参数(e)包含了在事件处理函数中可以被运用的一些数据,各种类型的事件中可能不同,这要根据类中事件成员的说明决定。
如下面所定义的一个事件响应方法:
private void button1_Click(object sender, System.EventArgs e);
由于是通过delegate来处理事件,因此,可通过 += 使一个事件具有多个响应方法;与此同时,还可以使一个方法作为多个事件的响应方法。
实例:
创建两个类,A类将提供事件的处理函数,并在步骤3中创建委托对象同时将事件处理函数包含在其中,事件处理函数的参数形式必须和委托对象的参数形式相一致。然后,A类将委托对象传递给B类。当B类中的事件被触发后, A类中的事件处理函数就相应的被调用了。下面是示例代码:
using System;
//步骤1:声明委托
public delegate void MyHandler1(object sender,MyEventArgs e);
public delegate void MyHandler2(object sender,MyEventArgs e);
//步骤2:创建事件处理函数的方法
class A{
public const string m_>URL:http://blog.chinaunix.net/u/13205/showart_70291.html
产生委托的实例:
public delegate int my_delegate_2(int x,int y);
class math_class
{
public int sub(int x, int y)
{
return(x+y);
}
}
my_delegate_2 del_example_1 = new my_delegate_2(math_class.sub);
接下来可以直接使用del_example_1调用sub方法了:
del_example_1(23,7)
事件
委托的最基本的一个用处就是用于事件处理。
在类中声明一个事件成员一般采用如下的语法形式:
public event 委托名 事件名
事件的定义用关键字event声明,不过声明事件之前必须存在一个多路广播委托:
public delegate void my_delegate_3(int x,int y);
//返回值为void的委托自动成为多路广播委托.
声明事件:
public event my_delegate_3 my_event_1;
如在Control类中声明了一个Click事件成员,其语法如下:
public event EventHandler Click;
Eventhandler是一个delegate类型,其在类库中声明如下:
public delegate void EventHandler(object sender,EventArgs e);
这样,所有形如:
void 函娄名(object 参数名,EventArgs 参数名);
的函数都可以作为Control类的Click事件响应方法了。
其中第一个参数指明了触发该事件的对象即sender,由于引发事件的对象不可预知的,因此我们把其声明成为object类型,所有的对象都适用。
第二个参数(e)包含了在事件处理函数中可以被运用的一些数据,各种类型的事件中可能不同,这要根据类中事件成员的说明决定。
如下面所定义的一个事件响应方法:
private void button1_Click(object sender, System.EventArgs e);
由于是通过delegate来处理事件,因此,可通过 += 使一个事件具有多个响应方法;与此同时,还可以使一个方法作为多个事件的响应方法。
实例:
创建两个类,A类将提供事件的处理函数,并在步骤3中创建委托对象同时将事件处理函数包含在其中,事件处理函数的参数形式必须和委托对象的参数形式相一致。然后,A类将委托对象传递给B类。当B类中的事件被触发后, A类中的事件处理函数就相应的被调用了。下面是示例代码:
using System;
//步骤1:声明委托
public delegate void MyHandler1(object sender,MyEventArgs e);
public delegate void MyHandler2(object sender,MyEventArgs e);
//步骤2:创建事件处理函数的方法
class A{
public const string m_>URL:http://blog.chinaunix.net/u/13205/showart_70291.html