上一篇: C# 泛型(Generic)
下一篇: C# 多线程
C# 匿名方法
在本教程中,我们将学习C#匿名方法的基本概念及其应用。
- 匿名方法简介
- 委托与匿名方法
- 匿名方法实例
- 匿名方法与Lambda表达式
匿名方法简介
匿名方法是一种不需要显式命名的方法,在C#中,它们主要用于声明和定义委托类型的实例。使用匿名方法可以减少代码重复,并使代码更简洁。
委托与匿名方法
要了解匿名方法,首先需要理解委托。委托是一个包含有指向某个方法的引用的对象类型,它允许将方法作为参数传递给其他方法。在C#中,可以通过委托类型来声明和定义匿名方法。
以下是一个简单的委托示例:
public delegate int Operation(int a, int b); // 定义具名方法 public static int Add(int a, int b) { return a + b; } // 使用具名方法创建委托实例 Operation op = Add; int result = op(3, 4); // 调用委托,输出7
现在我们来看如何使用匿名方法替换具名方法:
public delegate int Operation(int a, int b); // 使用匿名方法创建委托实例 Operation op = delegate(int a, int b) { return a + b; }; int result = op(3, 4); // 调用委托,输出7
在这个示例中,我们使用 delegate
关键字定义了一个匿名方法,并将其分配给了委托类型的实例。
匿名方法实例
以下是其他几个匿名方法的实例:
**实例1:**使用匿名方法作为参数传递给其他方法
public delegate void GreetingDelegate(string name); public static void GreetPeople(string name, GreetingDelegate greeting) { greeting(name); } // 调用GreetPeople方法,并传递一个匿名方法作为参数 GreetPeople("Alice", delegate(string name) { Console.WriteLine($"Hello, {name}!"); });
在这个示例中,我们将匿名方法作为参数直接传递给了GreetPeople方法。
**实例2:**使用匿名方法与泛型委托
public delegate T Transformer<T>(T item); public static T[] Transform<T>(T[] items, Transformer<T> transformer) { T[] results = new T[items.Length]; for (int i = 0; i < items.Length; i++) { results[i] = transformer(items[i]); } return results; } int[] numbers = { 1, 2, 3, 4 }; // 使用匿名方法实现平方变换 int[] squaredNumbers = Transform(numbers, delegate(int item) { return item * item; }); foreach (int number in squaredNumbers) { Console.WriteLine(number); // 输出 "1", "4", "9", "16" }
在这个示例中,我们使用泛型委托与匿名方法实现了一个通用的数组变换功能。
匿名方法与Lambda表达式
从C# 3.0开始,引入了Lambda表达式,它是一种更简洁的替代匿名方法的方式。以下是使用Lambda表达式重写上面的示例:
// 使用Lambda表达式创建委托实例 Operation op = (a, b) => a + b; // 使用Lambda表达式作为参数传递给其他方法 GreetPeople("Alice", name => Console.WriteLine($"Hello, {name}!")); // 使用Lambda表达式实现平方变换 int[] squaredNumbers = Transform (numbers, item => item * item);
在这些示例中,我们使用了Lambda表达式替换了匿名方法。可以看到,Lambda表达式使代码更简洁易读。
总结
本教程介绍了C#匿名方法的基本概念及其应用,包括委托与匿名方法、匿名方法实例以及匿名方法与Lambda表达式的关系。通过使用匿名方法,可以减少代码重复并提高代码可读性。