C#回调函数问题,新手问题的 C#回调函数的作用是什么和用法 ,希望通俗一点的说谢谢了c# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在C#中,回调(callback)被叫做事件和委托(event and delegate)。作用就是调用者将一个函数作为参数传给一个方法,让这个方法反过来调用调用者定义和传入的那个函数。 http://www.cnblogs.com/birdshover/archive/2008/01/07/1029471.html这个地址讲得还是比较易懂的一天你老婆让你去市场买菜,而你因为偷懒就让你的儿子去买,把菜买回来了你直接将菜交给老婆.而老婆只是想要菜,并不关心菜是谁买的.第二天你老婆让你去买米,结果你又交由儿子处理.第三天老婆让去买肉,可怜的儿子再次被你叫去了... 从这些事情我们可以抽象出一个类来. 这个类就是实现不管老婆让你去做什么,你都叫儿子去代劳.那么我们就可以定义一个"让儿子去做"这样的委托.然后传入"买菜","买肉"等函数进来,这些函数就是回调函数.这样不论老婆需要"买菜","买肉"或者其他任何的事情,都可以通过你这个类来完成.摘自http://hi.baidu.com/merry6046/item/8459313fa189f9f7df22214e 比如void ForEach<T>(T[] data, Action<T> callback){ for (int i = 0; i < data.GetLength(0); i++) { callback(data[i]); }}使用int[] data = { 1, 2, 3, 4, 5 };ForEach(data, x => Console.WriteLine(x)); // 依次输出每行数字int sum = 0;ForEach(data, x => sum += x); // 将所有元素相加Console.WriteLine(sum);你可以看出,同样调用ForEach,我传入不同的操作,可以实现不同的功能。 回调相当于定义一个函数的时候留下一道填空题:void ForEach<T>(T[] data, _______){ for (int i = 0; i < data.GetLength(0); i++) { _______ }}你可以指定函数内部某个地方填上什么。 delegate void mDelegate(); class Program { static void Main(string[] args) { //Run方法执行完了会通知Done回调函数 new mDelegate(Run).BeginInvoke(Done, null); Console.ReadLine(); } static void Run() { Console.WriteLine("我去跑100米啦"); for (int i = 0; i < 100; i++) { Console.WriteLine(string.Format("{0}米", i + 1)); } } //CallBackFun static void Done(IAsyncResult result) { Console.WriteLine("完成啦!"); } }这个不难懂吧 (100分求助)如何调用WinRar加密压缩文件(*.RAR)(在线等) C#控件永远在最前面显示 C# 网页登陆访问限制 在Form里放了一个UserControl,如何在UserControl里获得属于的Form。 怎样弹出另一个窗口 在C#中 刷新用户控件 又出错了 困扰我多日的正则表达式问题 解密之后信息带有乱字符,问题在哪里? 用jmail发送邮件总是出错,附源码 sql 语句的写法 opengl怎么样才能渲染透明纹理呢
这个地址讲得还是比较易懂的一天你老婆让你去市场买菜,而你因为偷懒就让你的儿子去买,把菜买回来了你直接将菜交给老婆.而老婆只是想要菜,并不关心菜是谁买的.第二天你老婆让你去买米,结果你又交由儿子处理.第三天老婆让去买肉,可怜的儿子再次被你叫去了...
从这些事情我们可以抽象出一个类来.
这个类就是实现不管老婆让你去做什么,你都叫儿子去代劳.那么我们就可以定义一个"让儿子去做"这样的委托.然后传入"买菜","买肉"等函数进来,这些函数就是回调函数.这样不论老婆需要"买菜","买肉"或者其他任何的事情,都可以通过你这个类来完成.
摘自http://hi.baidu.com/merry6046/item/8459313fa189f9f7df22214e
比如
void ForEach<T>(T[] data, Action<T> callback)
{
for (int i = 0; i < data.GetLength(0); i++)
{
callback(data[i]);
}
}使用
int[] data = { 1, 2, 3, 4, 5 };
ForEach(data, x => Console.WriteLine(x)); // 依次输出每行数字
int sum = 0;
ForEach(data, x => sum += x); // 将所有元素相加
Console.WriteLine(sum);你可以看出,同样调用ForEach,我传入不同的操作,可以实现不同的功能。
{
for (int i = 0; i < data.GetLength(0); i++)
{
_______
}
}你可以指定函数内部某个地方填上什么。
{
static void Main(string[] args)
{
//Run方法执行完了会通知Done回调函数
new mDelegate(Run).BeginInvoke(Done, null);
Console.ReadLine();
} static void Run()
{
Console.WriteLine("我去跑100米啦");
for (int i = 0; i < 100; i++)
{
Console.WriteLine(string.Format("{0}米", i + 1));
}
} //CallBackFun
static void Done(IAsyncResult result)
{
Console.WriteLine("完成啦!");
}
}
这个不难懂吧