1、委托是一个或多个函数指针的抽象,委托是类型安全的、面向对象和安全可靠的
2、使用步骤
声明委托public delegate int DelegateClass (string info)
使用new关键字创建委托的一个实例DelegateClass obj1 = new DelegateClass(MethodA)
使用调用运算符()激活一个委托obj1("1")或者显式调用obj1.Invoke("2")
当对象不需要委托的时候,将委托实例设为null
3、委托不能作为一个类的数据成员,也不能作为方法中的一个局部变量
4、多个函数假如委托时,这些函数根据先进先出的顺序被调用
5、对于实例方法,使用object.method格式,对于静态方法,使用class.method格式,如果静态方法和委托在同一个类中,则不需要类名
public delegate void DelegateClass();
class Program
{
static void Main(string[] args)
{
DelegateClass del1 = new DelegateClass(Program.MethodA);
DelegateClass del2 = new DelegateClass(MethodA);
ZClass obj = new ZClass();
DelegateClass del3 = new DelegateClass(obj.MethodB);
}
public static void MethodA()
{ }
}
public class ZClass
{
public void MethodB()
{ }
}
6、函数引用可以直接赋给委托,而不用new运算符,这就是委托推理
DelegateClass del1 =Program.MethodA;
DelegateClass del2 = MethodA;
ZClass obj = new ZClass();
DelegateClass del3 = obj.MethodB;
7、函数引用的签名必须匹配目标委托的签名。通过逆变和协变可以拓展这种匹配
8、异步调用
BeginInvoke方法:
可以在容纳了一个函数引用的委托上被调用
IAsyncResult BeginInvoke(arguments , AsyncCallback callback , object asyncState)