📌  相关文章
📜  使用 C# 将方法作为参数传递(1)

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

使用 C# 将方法作为参数传递

在 C# 中,我们可以将一个方法作为另一个方法的参数进行传递。将方法作为参数传递的好处在于可以使代码更加灵活、可重用,并且减少了代码的重复性。同时,这也是一种常用的面向对象编程方法。

委托

在 C# 中,我们使用委托(Delegate)来实现将方法作为参数传递的功能。委托是一种类似于函数指针的类型,它可以用于引用一个或一组方法,并调用这些方法。委托可以看做是一个函数指针,不过它是面向对象的,既可以引用静态方法,也可以引用实例方法。委托可以在运行时绑定到一组方法上,使得方法的执行更加灵活。

使用委托将方法作为参数传递

下面是一个简单的示例,演示如何使用委托将方法作为参数传递。首先定义一个委托类型,用于引用方法:

delegate int MyDelegate(int a, int b);

上述代码定义了一个委托类型 MyDelegate,它可以引用一个返回值为 int,参数列表为 (int a, int b) 的方法。接下来定义一个函数 MyFunc,接收一个 MyDelegate 类型的参数 callback,并调用 callback 引用的方法:

static void MyFunc(int x, int y, MyDelegate callback)
{
    int z = callback(x, y);
    Console.WriteLine(z);
}

上述代码定义了一个函数 MyFunc,它接收三个参数:整数 x、整数 y 和一个类型为 MyDelegate 的委托参数 callback。在函数内部,我们调用了委托参数 callback 引用的方法,并将返回值输出到控制台。

接下来,我们定义两个示例方法,用于演示如何将它们作为参数传递:

static int Add(int a, int b)
{
    return a + b;
}

static int Multiply(int a, int b)
{
    return a * b;
}

上述代码定义了两个示例方法 AddMultiply,分别实现整数加法和乘法。

最后,我们将这些方法作为参数传递给 MyFunc 方法,并观察它们的输出:

MyDelegate addDelegate = new MyDelegate(Add);
MyDelegate multiplyDelegate = new MyDelegate(Multiply);

MyFunc(2, 3, addDelegate);        // 输出 5
MyFunc(2, 3, multiplyDelegate);   // 输出 6

上述代码中,我们使用 new 关键字创建了两个委托实例 addDelegatemultiplyDelegate,分别引用 AddMultiply 方法。接着我们将这两个委托实例作为参数传递给 MyFunc 方法,并观察它们的输出结果。

Lambda 表达式

除了使用委托之外,C# 中还可以使用 Lambda 表达式来将方法作为参数传递。Lambda 表达式是一种快速定义匿名方法的方法,它可以用于创建委托实例,进而传递方法作为参数。下面是一个示例,演示如何使用 Lambda 表达式来将方法作为参数传递:

static void MyFunc(int x, int y, Func<int, int, int> callback)
{
    int z = callback(x, y);
    Console.WriteLine(z);
}

MyFunc(2, 3, (a, b) => a + b);        // 输出 5
MyFunc(2, 3, (a, b) => a * b);        // 输出 6

上述代码定义了一个函数 MyFunc,它接收三个参数:整数 x、整数 y 和一个类型为 Func<int, int, int> 的委托参数 callbackFunc<int, int, int> 是一个泛型委托类型,它可以引用一个返回值为 int,参数列表为 (int a, int b) 的方法。

在第二部分的示例中,我们使用 Lambda 表达式来创建了两个匿名方法,并将它们作为参数传递给 MyFunc 方法。其中 (a, b) => a + b 表示一个返回整数加法的匿名方法,(a, b) => a * b 表示一个返回整数乘法的匿名方法。将两个匿名方法作为参数传递后,我们观察了它们的输出结果。