新手提问,为什么要用委托,具体在什么时候会用? delegate委托 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你那个用委托没必要,给你举个例子吧 你有一个线程用于循环处理数据后绑定gridview的值 直接绑定肯定不行 这个时候就需要用委托绑定了 从数据结构来说,委托里是函数的入口地址。从设计来说,委托是对功能性的一个约定。用写一个排序函数来说,if(a>b)这句就是具体的调用,而一个a和b不是一个直接可以比较的数值或字符,你的函数就会失效.但在这里,if(a>b)这句从功能型来说,就是传入a和b,a>b你就给我返回true,这就是你所需要的,具体怎么比你不需要知道.因此你把它抽象为一个Func<objct,object,bool> compare(参数为两个object,返回值为bool)的委托,同时在排序中改为if(compare(a,b))。如此一来,你这个函数里的比较方式面对的就是比较器的抽象,面对任何数据类型,你都不需要改动源码.用生活来说,楼主你是老板,要买一杯咖啡,你的需要就是有一杯咖啡递到你面前,让你能喝,至于这杯咖啡是人还是鬼,是怎么弄来的,你都不要关心。 不要把委托和线程混在一起,只是多线程操作UI时,需要用到委托来解决,而委托能解决的问题远不止这个。如Linq用是就是各种委托。如果要解释多线程更新UI个人认为可以这样理解:多个线程不能同时更新UI就如同两个人不能同时相向面行地走直钢丝绳,因这样两个都会掉下去,因此我们就把如何走钢丝绳的方式(委托)告诉每一个人,当确定不会出现两个人同时相向而行时(系统线程调度到创建UI的线程时),就按照预先给的方式(委托)走下去就行了。委托在.Net的应用非常多,如Linq,你的例子比较单调,因此不知道他有什么用。如:你有一个方法,会给出两个参数,并返回一个整数值(像你的例子),但不明确这两个参数要如何运算的,什么都有可能,不可能预先确定的。这个时用委托就会比较简单,当然也可以其他办法如接口; private void Call(int a, int b, Func<int, int, int> fun) { int value = fun(a, b); if (value > 1000) { //Save1 } else { //Save2 } } private void test() { this.Call(1, 2, (a, b) => { return a + b; }); this.Call(1, 2, (a, b) => { return a - b; }); this.Call(1, 2, (a, b) => { return a * b; }); this.Call(1, 2, (a, b) => { return a / b; }); this.Call(1, 2, (a, b) => { return a + b - 1; }); } (class Program { delegate int mydelegate(int x, int y); static int Add(int x,int y) { return x+y; } private static void Call(int a, int b, Func<int, int, int> fun) { int value = fun(a, b); Console.WriteLine(value); } static void Main(string[] args) { Call(2, 2, (a, b) => { return a * b; }); Call(1,3,Add); } } 俺理解,delegate主要是对外,内部用就是多个线程(也算是对外); 关于TreeNode 求救字符串转换日期问题 如何在应用程序启动前有一段动画 C#中的注释问题 求 C 翻译为 C# C#winFrom如何将信息导出XML文件格式 目前有没有FastReport For .Net的版本的 C#winform程序在别的电脑如何远程访问本机数据库? 在树的右键菜单中点击刷新子项,由于执行很慢,菜单长时候保存在界面上,请问怎么处理 求教:怎样编程把一个输入的http网址转换成相应的IP地址? 怎么将XML文件中的数据序列化成字符串,并能反序列化 采集数据 同一程序使用不同账号登录采集不一样的数据
给你举个例子吧 你有一个线程用于循环处理数据后绑定gridview的值 直接绑定肯定不行 这个时候就需要用委托绑定了
如果要解释多线程更新UI个人认为可以这样理解:多个线程不能同时更新UI就如同两个人不能同时相向面行地走直钢丝绳,因这样两个都会掉下去,因此我们就把如何走钢丝绳的方式(委托)告诉每一个人,当确定不会出现两个人同时相向而行时(系统线程调度到创建UI的线程时),就按照预先给的方式(委托)走下去就行了。
委托在.Net的应用非常多,如Linq,你的例子比较单调,因此不知道他有什么用。
如:你有一个方法,会给出两个参数,并返回一个整数值(像你的例子),但不明确这两个参数要如何运算的,什么都有可能,不可能预先确定的。这个时用委托就会比较简单,当然也可以其他办法如接口; private void Call(int a, int b, Func<int, int, int> fun)
{
int value = fun(a, b); if (value > 1000)
{
//Save1
}
else
{
//Save2
}
} private void test()
{
this.Call(1, 2, (a, b) =>
{
return a + b;
}); this.Call(1, 2, (a, b) =>
{
return a - b;
}); this.Call(1, 2, (a, b) =>
{
return a * b;
}); this.Call(1, 2, (a, b) =>
{
return a / b;
}); this.Call(1, 2, (a, b) =>
{
return a + b - 1;
});
}
class Program
{
delegate int mydelegate(int x, int y);
static int Add(int x,int y)
{
return x+y;
}
private static void Call(int a, int b, Func<int, int, int> fun)
{
int value = fun(a, b);
Console.WriteLine(value);
} static void Main(string[] args)
{
Call(2, 2, (a, b) =>
{
return a * b;
}); Call(1,3,Add);
}
}