委托实质上是一个用于专门定义函数指针的类. 例如:public delegate int myfunc(int x); 功能上讲类似于C/C++中的: typedef int (* myfunc)(int x);而从另一方面讲它又像是简化了的接口类型: public interface ISample { int myfunc(int x); }不过委托又有其特殊之处,一个委托可以同时指向几个函数,因此实质上它是一个函数指针数组.//.......................................................委托经典的用法如下: using system;public delegate void myEventHandler(Object Sender,myEventArgs e);public class myTest { private int x; public event myEventHandler myEventBefore; public event myEventHandler myEventAfter; //......................... public int X { get{ get x; } set { myEventBefore(this,null); x=value; myEventAfter(this,null); } } }public class myApp { public static void myCallBackfucBefore(Object Sender,MyEventArgs e) { //do something before set value; } public static void myCallBackfucAfter(Object Sender,MyEventArgs e) { //do something after set value; } public static void main() { myTest myt=new myTest(); myt.myEventBefore+=new myEventHandler(myCallBackfucBefore); //把函数包装成委托。 myt.myEventAfter+=new myEventHandler(myCallBackfucAfter); //把函数包装成委托。 myt.X=0; //测试一下!:) }这里的事件参数类 MyEventArgs 我没有定义,为的是简化程序. 我也是现学现卖了 :)
例如:public delegate int myfunc(int x);
功能上讲类似于C/C++中的:
typedef int (* myfunc)(int x);而从另一方面讲它又像是简化了的接口类型:
public interface ISample
{
int myfunc(int x);
}不过委托又有其特殊之处,一个委托可以同时指向几个函数,因此实质上它是一个函数指针数组.//.......................................................委托经典的用法如下:
using system;public delegate void myEventHandler(Object Sender,myEventArgs e);public class myTest
{
private int x;
public event myEventHandler myEventBefore;
public event myEventHandler myEventAfter;
//.........................
public int X
{
get{ get x; }
set
{
myEventBefore(this,null);
x=value;
myEventAfter(this,null);
}
}
}public class myApp
{
public static void myCallBackfucBefore(Object Sender,MyEventArgs e)
{
//do something before set value;
} public static void myCallBackfucAfter(Object Sender,MyEventArgs e)
{
//do something after set value;
} public static void main()
{
myTest myt=new myTest();
myt.myEventBefore+=new myEventHandler(myCallBackfucBefore);
//把函数包装成委托。
myt.myEventAfter+=new myEventHandler(myCallBackfucAfter);
//把函数包装成委托。
myt.X=0;
//测试一下!:)
}这里的事件参数类 MyEventArgs 我没有定义,为的是简化程序.
我也是现学现卖了 :)