因为普通调用很多功能实现不了,所以出现委托
委托是C#中最为常见的内容。与类、枚举、结构、接口一样,委托也是一种类型。类是对象的抽象,而委托则可以看成是函数的抽象。一个委托代表了具有相同参数列表和返回值的所有函数。
可以实现异步线程操作UI,可以实现观察者模式等,可以将方法当作参数操作等
例如:
我们要为void Do(int a, double b) 的方法创建委托
定义委托:
delegate void DelegateHandler(int a, double b);
public class Test {
public void DelegateTest(int a, double b) {
Console.WriteLine("a = {0}, b = {1}", a, b);
}
}
有上面的方法,可以用它对委托变量赋值了。
Test t = new Test();
DelegateHandler handler = t.DelegateTest;
handler(1, 2);
比如Winform 异步线程更新UI
this.Invoke(new Action(Delegate{
this.textBox1.Text = "1";
}))
个人理解:
不用委托,如何解决重用性问题?
C#里面预置了很多方法是调用委托的,具体实现过程由其他开发者自行设计,这样也比较灵活。如果这些方法不调用委托,而是传参数的话,那微软的开发人员还不疯掉啊,无论设计多少个方法,都无法满足其他开发者的要求啊。
比如某些预置的排序、比较,就是调用委托的。