📜  将函数作为变量传递 C# (1)

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

将函数作为变量传递 C#

在 C# 中,函数(也称为方法)可以像变量一样进行传递。这种技术被称为委托,它是一种引用方法的类型,可以让你进行回调和事件处理。在本文中,我们将介绍委托和如何将函数作为变量传递。

委托

在 C# 中,一个委托是一个指向方法的引用。委托的使用允许方法作为参数传递,允许您实现回调和事件处理等功能。委托是一个类型,就像在声明变量时需要指定类型一样,您在声明委托时也需要指定方法的签名。以下是一个示例:

delegate int MyDelegate(string s);

这个委托表示一个参数为 string 类型,返回值为 int 类型的方法。您可以使用这个委托来调用这个方法,甚至可以将这个委托作为参数传递给其他方法。

委托实例化

函数作为变量传递需要委托的实例化,下面是一些实例化示例:

MyDelegate myDel = new MyDelegate(MyMethod); // 通过方法名实例化
MyDelegate myDel = delegate (string s) { return s.Length; }; // 匿名方法实例化
MyDelegate myDel = s => s.Length; // lambda 表达式实例化

第一种方式是将一个已存在的方法实例化为委托。第二种方式是使用匿名方法实例化委托,这种方法所包含的代码对于环境中的其他部分是不可见的。第三种方式是使用 lambda 表达式,这是一种更简洁的语法,在 C# 3.0 中添加,它表示一个方法体,其参数以及返回类型是根据上下文自动推断的。

委托使用

一旦您创建了委托实例,您就可以使用它来调用代表的方法。以下是一个示例:

int result = myDel("hello world"); // 调用方法,传递参数

上面的代码将调用 MyMethod 方法,并将字符串 "hello world" 传递给它。方法的返回值将成为变量 result 的值。

将函数作为变量传递

有了委托,您可以轻松地将函数作为变量传递。以下是一个使用委托的函数:

void ProcessString(string s, MyDelegate del) {
    int result = del(s);
    Console.WriteLine(result);
}

它接受一个字符串和一个委托作为参数。这个函数将委托用于传递的字符串,并输出结果。以下是如何调用它:

ProcessString("hello world", s => s.Length);

这里我们使用 lambda 表达式作为委托,它表示一个返回字符串长度的方法。 ProcessString 函数将字符串 "hello world" 和 lambda 表达式作为参数调用,输出字符串长度。

总结

将函数作为变量传递是 C# 中一个非常强大的概念。它使得我们可以更好地使用回调和事件处理,以及实现其他各种功能。使用委托可以让你像操作变量一样操作函数,这大大提高了代码的灵活性和可读性。