📜  c# 回调参数 - C# (1)

📅  最后修改于: 2023-12-03 15:29:47.053000             🧑  作者: Mango

C# 回调参数

在 C# 中,回调是一种程序设计方式,它允许我们在某个程序执行一个特定操作的同时,回调另一个程序以 执行另一项操作。

1. 回调函数

回调函数是 C# 中最常用的回调形式之一,它是指一个被传递给另一个函数的函数。这个函数在另一个函数执行完毕后被调用。

// 回调函数示例
delegate void MyDelegate(string value); // 声明委托类型
static void MyFunc(string value, MyDelegate callback) // 接收回调函数作为参数
{
    // 执行一些操作
    callback(value); // 调用回调函数
}
static void MyCallback(string value) // 回调函数
{
    Console.WriteLine("Callback value: " + value);
}
static void Main()
{
    // 调用 MyFunc,并把 MyCallback 函数作为回调函数传递进去
    MyFunc("hello world", MyCallback);
}

在上面的示例中,MyFunc 函数接收两个参数,一个是 value,一个是 callbackcallback 参数是一个委托类型,它用于接收回调函数作为参数。函数执行过程中,回调函数 MyCallback 被调用,输出 Callback value: hello world

2. Action 和 Func 委托

在 C# 中,Action 委托是一种不接收输入参数的委托类型,用于表示一个无返回值的方法。Func 委托是一种接收一个或多个输入参数的委托类型,用于表示一个有返回值的方法。

// Action 和 Func 示例
static void MyFunc(Action<string> callback)
{
    // 执行一些操作
    callback("hello world");
}
static void MyCallback(string value)
{
    Console.WriteLine("Callback value: " + value);
}
static void Main()
{
    MyFunc(MyCallback); // MyCallback 是一个 Action 类型委托函数
    Func<int, int> square = x => x * x; // square 是一个 Func 委托类型
    int result = square(5); // 调用委托函数,返回 25
}

在上面的示例中,MyFunc 函数接收一个 callback 参数,它是一个 Action<string> 委托类型,表示一个不接收任何参数的方法。回调函数 MyCallback 被传递给 callback,输出 Callback value: hello world

Func<int, int> 委托类型表示一个接收一个整型参数并返回一个整型结果的方法。在示例中,我们使用 lambda 表达式来定义一个返回参数平方值的函数 square,然后调用该函数,返回 25

3. Lambda 表达式

Lambda 表达式是 C# 3.0 中引入的一种表达式形式。它允许我们在不定义具体函数的情况下,直接将函数体作为参数传递给其他函数。

Lambda 表达式以 => 符号分隔参数和表达式,参数和表达式之间用一个箭头符号来连接,示例如下:

// Lambda 表达式示例
Func<int, int> square = x => x * x;

在上面的示例中,x => x * x 是一个匿名函数,表示一个以 x 为参数,并返回 x * x 的表达式。将该匿名函数赋值给 square 委托,使 square 委托指向该函数。

4. 总结

C# 回调参数是实现程序中各个部分之间互相协作的一种方式。通过回调函数,我们可以在一个程序执行完特定操作时,向另一个程序发出信号,通知其执行相应的动作。在 C# 中,我们可以使用委托、Action、Func、Lambda 等各种方法来实现回调功能。熟练掌握 C# 回调参数的使用方法,能够使程序更加灵活和高效。