Delegate:简单的可以理解为动词名词化。
委托是一个函数的引用,拥有和函数相同的返回值类型,
而委托实际上是一个类,他能够持有对某种方法的引用,该类拥有一个签名,只能应用与其签名相匹配的方法。
正因为一个委托是一个实例化的类(一个对象),所以委托是受控制和安全的。
实现一个委托:
1:声明delegate对象,与想传递给他的方法具有相同的返回值类型
2:创建delegate对象,将想要引用的函数做为参数传入
3:在实现异步调用的地方,通过创建的委托对象(一个委托类的实例)来调用方法
应用
当 Win32 函数需要返回多项数据时,通常都是通过回调机制来实现的。开发人员将函数指针传递给函数,然后针对每一项调用开发人员的函数。
在 C# 中没有函数指针,而是使用“委托”,在调用 Win32 函数时使用委托来代替函数指针。
委托调用:
方法一:创建委托对象后,将委托对象传递给调用委托的其他代码(如一个方法)。通过委托对象的名称(后面跟着要传递给委托的参数)调用委托对象
eg:
//声明一个委托:
public class DelegateClass
{
public delegate void DelegateA(String s);
private void FA(String s)
{
MessageBox.Show("hi "+ s);
}
private void FB(String s)
{
MessageBox.Show("88 " + s);
}
private void FC(String s)
{
MessageBox.Show("this is " + s);
}
public void DoDelegateA(DelegateA da,String info)
{
da(info);
}
}
调用:
实例化类:
DelegateClass dc = new DelegateClass();
dc.DoDelegateA(new DelegateA(FA),“haha“);//将FA的引用传递给一个DelegateA委托实例
dc.DoDelegateA(new DelegateA(FB),“hoho“);
输出消息框显示分别为:
hi haha
88 hoho
方法二:实例化委托对象,直接传递参数给委托对象调用
还是比如上面的类中
DelegateA delegateA = new DelegateA(FC);
delegateA(“heihei“);
补充中...