上一篇: C# 泛型(Generic)

下一篇: C# 多线程

C# 匿名方法

在本教程中,我们将学习C#匿名方法的基本概念及其应用。

  1. 匿名方法简介
  2. 委托与匿名方法
  3. 匿名方法实例
  4. 匿名方法与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表达式的关系。通过使用匿名方法,可以减少代码重复并提高代码可读性。