简介
在C#中,最基本的内容不外乎数据和函数。就象做菜一样,数据是原料,函数是操作。C#中提供了多种数据类型用于表示数据,同时提供了函数,用于定义对数据的操作。举例来说,以下函数定义了一个基本操作函数将传入字符串以指定格式输出。
public void Show(string message)
{
Console.WriteLine("[{0}] {1}", DateTime.Now.ToString(), message);
}
Show函数接收到传入数据,然后调用Console.WriteLine
进行显示。笔者特别加粗了“数据”,因为在这个大家以为常的过程中,我们传输的都是数据。既然数据和操作是不可分割的,那么我们就有了这样的一个问题:除了数据,我们是否也可以传递函数?
委托解释
答案显然是肯定的。除了数据,在C#中也可以传递函数。为了表示函数,C#引用了一个新的概念就是委托。用最通俗的话来说,委托就是对函数的封装,用于代表某个函数,从而便于在函数传参中进行调用。以下是一个传参的示例,用于演示数据和函数一起传送。
public override void Test()
{
Process(Show, "A delegate demo");
}
public void Process(Action<string> act, String s)
{
act(s);
}
public void Show(string message)
{
Console.WriteLine("[{0}] {1}", DateTime.Now.ToString(), message);
}
以上所示,我们定义了一个Process函数,它接受两个参数,第一个是函数,第二个是数据。在Test()函数中,即可将Show函数作为参数进行传递。
实现主要基于Action类,具体细节,见下一讲。
小节
本节主要介绍了委托的概念,即可以在函数的参数中,将函数进行参数进行传递及调用。