对于委托的定义,我的理解就是封装一类型的方法,然后根据传递进的参数,由系统来进行选择调用。
申明:
delegate void voidOperation(uint x)
这申明了一个委托,与这个委托匹配的方法格式为:不返回任何结果,参数。
delegate int intOperation(int x,int y)
申明一个委托,与这个委托匹配的方法格式为:返回一个整数,需要传入两个整型的参数。
delegate bool boolOperation(object o1,object o2)
申明一个委托,与这个委托匹配的方法格式为:返回一个bool型参数,需要传入两个对象参数。
使用方法:
要使用委托,首先需要拥有一个与委托相匹配的方法,然后将方法传入委托,然后通过委托得到结果。
示列:
------类-------
class test1
{
public int m;
public int n;
//比较大小
public static bool CompareOver(test1 bt1, test1 bt2)
{
if ((bt1.m + bt1.n) >= (bt2.n + bt2.m))
{
return true;
}
else
{
return false;
}
}
}
---------申明委托------------
public delegate bool compareop(test1 o1, test1 o2);
---------使用委托------------
test1 t1 = new test1();
test2 t2 = new test2();
compareop cp = new compareop(test1.CompareOver)
bool label = cp(t1,t2);
--------说明--------------
首先test1类中有一个比较大小的静态方法,其方法与申明的委托一致(因此可以使用委托),
当实例化委托时将这个方法传入,也就是说委托cp具有了test1类中的比较的方法,
这时当你传入两个实列化的对象后,得出结果。
注意事项:
所以从上面可以看出,委托是将方法作为参数传入,然后可以通过传入参数得到结果。
比较常用的就是跨线程调用时用到委托,
还有就是当你不知道,到底传入什么参数,利用什么方法,来进行操作,你可以设计一个委托来封装一个标准的接口,然后对于想进行操作的类来说,他只要按照委托的格式设计一个方法就可以进行操作了。当然这个也可以用接口来实现。