匿名方法,泛型委托,Lambda表达式
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//匿名方式
//通过delegate关键字,声明一个没有方法名的方法体。
GetValue getValue = new GetValue
(delegate(string a)
{
MessageBox.Show(a);
}
);
getValue("aaa");
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
Func<string,string> GetValueFunc = new Func<string,string>(delegate(string a)
{
return "测试的为:" + a;
});
MessageBox.Show(GetValueFunc("泛型委托"));
}
private void Button_Click_3(object sender, RoutedEventArgs e)
{
//lambda表达式可以看作是一个匿名方法,以“=>”运算符为标志,“=>”左边部分为传入该匿名方法的两个参数,
//注意,这两个参数我们没有声明类型,但编译器会根据前面泛型委托的定义自动推断出其参数类型(返回值类型是同样的原理)。
//“=>”右边为返回值。
Func<int, int, string> delegate1 = (x, y) => x > y ? x.ToString() : y.ToString();
string STR = "最大的数位:" + delegate1(10, 20);
MessageBox.Show("lambda表达式:" + STR);
/*Lambda 的一般规则如下:
Lambda 包含的参数数量必须与委托类型包含的参数数量相同。
Lambda 中的每个输入参数必须都能够隐式转换为其对应的委托参数。
Lambda 的返回值(如果有)必须能够隐式转换为委托的返回类型。
请注意,Lambda 表达式本身没有类型,因为常规类型系统没有“Lambda 表达式”这一内部概念。
但是,有时会不正式地论及 Lambda 表达式的“类型”。 在这些情况下,类型是指委托类型或 Lambda
表达式所转换为的 Expression 类型。*/
}