推荐阅读:
http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx
http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-Advanced.aspx
简单来说:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句
举例:有A(string name) B(string name) C (string name) 三个方法
现在调用哪个方法不确定。那么需要将方法作为参数传递,这个涉及到映射,是一个难点,具体可以参考我的映射教程。此处假设已经完成了方法与参数的映射。
如果不用委托
则程序需要判断
if(A)
else if(B)
else(C)
采用委托则会简单很多
参第一个链接
//注意此方法,它接受一个GreetingDelegate类型的方法作为参数
private static void GreetPeople(string name, GreetingDelegate MakeGreeting) {
MakeGreeting(name);
}
此处就能将方法作为MakeGreeting参数传递,然后调用MakeGreeting(name);即调用对应的方法。
事件:对委托进行了封装
区别 | 委托 | 事件 |
是否可以使用=来赋值 | 是 | 否 |
是否可以在类外部进行调用 | 是 | 否 |
是否是一个类型 | 是 | 否,事件修饰的是一个对象 |