http://blog.sina.com.cn/s/blog_4889194f0100ibqa.html
http://blog.sina.com.cn/s/blog_4889194f0100ibqr.html
回调函数就是把一个方法的传给另外一个方法去执行。在C#有很多回调函数,比如异步操作的时候。这里先举个例子:
using
System;
using System.Collections.Generic;
using System.Text;
namespace TestApp
{
///
<summary>
///
委托
///
</summary>
///
<param name="s1"></param>
///
<param name="s2"></param>
///
<returns></returns>
public
delegate
string
ProcessDelegate(
string
s1,
string
s2);
class
Program
{
static
void
Main(
string
[] args)
{
Test t
=
new
Test();
string
r1
=
t.Process(
"
Text1
"
,
"
Text2
"
,
new
ProcessDelegate(t.Process1));
string
r2
=
t.Process(
"
Text1
"
,
"
Text2
"
,
new
ProcessDelegate(t.Process2));
string
r3
=
t.Process(
"
Text1
"
,
"
Text2
"
,
new
ProcessDelegate(t.Process3));
Console.WriteLine(r1);
Console.WriteLine(r2);
Console.WriteLine(r3);
}
}
public
class
Test
{
public
string
Process(
string
s1,
string
s2,ProcessDelegate process)
{
return
process(s1, s2);
}
public
string
Process1(
string
s1,
string
s2)
{
return
s1
+
s2;
}
public
string
Process2(
string
s1,
string
s2)
{
return
s1
+
Environment.NewLine
+
s2;
}
public
string
Process3(
string
s1,
string
s2)
{
return
s2
+
s1;
}
}
}
using
using
namespace
{
}
输出结果:
Text1Text2
Text1
Text2
Text2Text1
Process方法调用了一个回调函数, 当然这里只执行了回调函数。可 以看出,可以把任意一个符合这个委托的方法传递进去,意思就是说这部分代码是可变的。而设计上有一个抽离出可变部分代码的原则,这种用法无疑可以用到那种场合了。