黑马程序员技术交流社区
标题:
关于委托的问题
[打印本页]
作者:
wushanwow
时间:
2014-2-8 12:46
标题:
关于委托的问题
本帖最后由 wushanwow 于 2014-2-9 00:17 编辑
委托大概学习了一下怎么使用,委托使用最多的是事件处理中,但是我还是不是很清楚,使用委托的好处到底在哪里,比我用别的方法处理的优势体现在什么地方.
作者:
squilla
时间:
2014-2-8 12:57
http://ruizhinet.blog.163.com/blog/static/9921382820092801032681/ 这里写很清楚,供你参考吧~
作者:
wxfyzt
时间:
2014-2-8 13:25
了解委托,从其定义开始,通常一个委托被声明为:
public delegate void CalculateDelegate(Int32 x, Int32 y);
关键字 delegate 用于声明一个委托类型 CalculateDelegate,可以对其添加访问修饰符,默认其
返回值类型为 void,接受两个 Int32 型参数 x 和 y,但是委托并不等同与方法,而是一个引用类型,
类似于 C++中的函数指针,稍后在委托本质里将对此有所交代。
下面的示例将介绍如何通过委托来实现一个计算器模拟程序,在此基础上来了解关于委托的
定义、创建和应用:
class DelegateEx
{
//声明一个委托
public delegate void CalculateDelegate(Int32 x, Int32 y);
//创建与委托关联的方法,二者具有相同的返回值类型和参数列表
public static void Add(Int32 x, Int32 y)
{
Console.WriteLine(x + y);
}
//定义委托类型变量
private static CalculateDelegate myDelegate;
public static void Main()
{
//进行委托绑定
myDelegate = new CalculateDelegate(Add);
//回调 Add 方法
myDelegate(100, 200);
}
}
上述示例,在类 DelegateEx 内部声明了一个 CalculateDelegate 委托类型,它具有和关联方法
Add 完全相同的返回值类型和参数列表,否则将导致编译时错误。将方法 Add 传递给 CalculateDel
egate 构造器,也就是将方法 Add 指派给 CalculateDelegate 委托,并将该引用赋给 myDelegate 变
量,也就表示 myDeleage 变量保存了指向 Add 方法的引用,以此实现对 Add 的回调。
由此可见,委托表示了对其回调方法的签名,可以将方法当作参数进行传递,并根据传入的
方法来动态的改变方法调用。只要为委托提供相同签名的方法,就可以与委托绑定,例如:
public static void Subtract(Int32 x, Int32 y)
{
Console.WriteLine(x - y);
}
同样,可以将方法 Subtract 分配给委托,通过参数传递实现方法回调,例如:
public static void Main()
{
//进行委托绑定
myDelegate = new CalculateDelegate(Subtract);
myDelegate(100, 200);
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2