委托(delegate)
CRE:委托是用户定义的一个类,定义一个委托即定义一个类。
CRE:委托是对方法的引用,类似C++函数指针。
在C++中,函数指针不过是一个指向内存位置的指针,它不是类型安全的。而.NET委托就完全不同,委托是类型安全的类,它定义了返回类型和参数类型。委托还可以包含对多个方法的引用。
应用场景
有时候需要把一个方法/函数传递给另一个方法/函数。例如启动线程任务、事件处理等。
在面向对象编程中,方法几乎都要与类实例相关联,所以函数指针这种机制不能使用,需要把方法的细节封装在一种新的对象类型中,即委托。
定义
委托定义:
public delegate TR MyDel(T1, T2...)
委托变量的实例化:
MyDel del = new MyDel(method1)
(旧语法)(参数和返回值类型必须匹配)
MyDel del = method1
(C#2.0)
多播
CRE:C#委托都是多播委托。
?:委托是不可变的,使用+=、-=操作符是实际上创建了新的委托来赋给当前委托变量。
方法的组合、新增、删除:
del = del1 + del2
del += del1
del -= del1
匿名方法
普通匿名方法:Mydel del = delegate (T1, T2){...}
Lambda表达式:Mydel del = (T1, T2)=>{...}
常用委托Action<>和Func<>
Action<>委托返回void类型,Func<>委托返回指定类型的值。
?:实际上仅通过两种泛型委托就可以满足99% 的需求。
(END)