匿名方法
C#为委托提供一种机制,可以为委托定义匿名方法,匿名方法没有名称,编译器会定指定一个名称,匿名方法中不能使用跳转语句跳转到该匿名方法的外部,也不能跳转到该方法的内部。也不能在匿名方法外部使用的ref和out参数。
注意:通过使用匿名方法,可以不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。
- 编写匿名方法的语法
匿名方法是通过使用delegate关键字创建委托实例来声明的。
编写程序,通过匿名方法实现加法和乘法运算。
using System;
//声明委托
delegate void NumberChanger(int x, int y);
namespace Project23
{
class Program
{
static int num = 0;
//定义相加的方法AddMethod
public static void AddMethod(int a, int b)
{
num = a + b;
Console.WriteLine("相加方法: {0}", num);
}
//定义相乘的方法MultMethod
public static void MultMethod(int m, int n)
{
num = m * n;
Console.WriteLine("相乘方法: {0}", num);
}
static void Main(string[] args)
{
// 使用匿名方法创建委托实例
NumberChanger nc = delegate (int x, int y)
{
Console.WriteLine("匿名方法: x={0};y={1}", x, y);
};
// 使用匿名方法调用委托
nc(10, 15);
// 使用AddMethod方法实例化委托
nc = new NumberChanger(AddMethod);
// 使用匿名方法调用委托
nc(10, 15);
// 使用MultMethod方法实例化委托
nc = new NumberChanger(MultMethod);
// 使用匿名方法调用委托
nc(10, 15);
Console.ReadKey();
}
}
}
【程序分析】本例演示了匿名方法的使用。在这段代码中,首先声明一个委托NumberChanger,该委托用于返回void类型且有两个int作为参数的方法。接着在Program类中,定义一个全局变量num并初始化为0;定义AddMethod方法,用于两个整数的相加;定义MultMethod方法,用于两个整数的相乘。然后,使用匿名方法创建委托实例nc,并使用匿名方法调用委托。最后通过MultMethod方法和AddMethod方法实例化委托,计算出变量x、y的和与乘积。
匿名方法: x=10;y=15
相加方法: 25
相乘方法: 150
Lambda表达式
Lambda表达式是一种可用于创建委托类型的匿名函数。通过使用Lambda表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。Lambda表达式简化了开发中需要编写的代码量,对于编写LINQ查询表达式特别有用。
- 创建Lambda表达式
若要创建Lambda表达式,需要在Lambda运算符=>左侧指定输入参数,然后在另一侧输入表达式或语句块。
编写程序,创建Lambda表达式,计算一个整数的平方值。
using System;
namespace Project24
{
class Program
{
delegate int MyDele(int i); //声明委托
static void Main(string[] args)
{
MyDele DeleLambda = x => x * x; //指定名为x的参数,并返回x的平方值
int num = DeleLambda(4);
Console.WriteLine(num);
Console.ReadKey();
}
}
}
【程序分析】本例演示了如何创建Lambda表达式。在代码中,首先声明一个委托MyDele,该委托用于返回int类型且有一个int作为参数的方法;然后在Main方法中,创建Lambda表达式,指定名为x的参数,并返回x的平方值。
16
- 表达式lambda
表达式位于=>运算符右侧的Lambda表达式称为“表达式lambda”。表达式lambda广泛用于表达式树的构造。
仅当Lambda只有一个输入参数时,括号才是可选的;否则括号是必需的。括号内的两个或更多输入参数使用逗号加以分隔:
编写程序,使用表达式lambda,计算两个整数的和。
using System;
namespace Project25
{
class Program
{
delegate int MyDele(int x, int y); //委托类型
static void Main()
{
MyDele DeleLambda = (x, y) => x + y;
int sum = DeleLambda(1, 1);
Console.WriteLine(sum);
Console.ReadKey();
}
}
}
【程序分析】本例演示了表达式Lambda的使用。在代码中,首先声明一个委托MyDele,该委托用于返回int类型且有两个int作为参数的方法;然后创建Lambda,计算两个整数的和。
2