匿名方法,泛型委托,Lambda表达式

匿名方法,泛型委托,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 类型。*/
        }

你可能感兴趣的:(lambda)