匿名方法

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 匿名函数
{
    //委托1
    public delegate string SayHello(string str);

    //委托2
    public delegate int Sum(int a,int b);

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void test1()
        {
            //1 委托实例的最初的写法
            SayHello say = delegate(string str) { return "haha" + str; };

            //调用
            string hello = say("lizhch");
            MessageBox.Show(hello);

            //2 演化 可以省略delegate
            SayHello say2 = (str) => { return str + "try"; };

            //调用
            string hello2 = say2("lizhch");
            MessageBox.Show(hello2);

            //3 演化 如果函数体有返回值,并且只有一句话可将大括号和 return 省掉,参数的括号也可以去掉
            SayHello say3 = str => str + "try";

            //调用
            string hello3 = say3("lizhchtt");
            MessageBox.Show(hello3);

            //4 多个输入参数的匿名方法的写法-定义一个委托的实例
            Sum sum = (a, b) => a + b;

            //调用
            MessageBox.Show(sum(1, 2).ToString());


            //----------------查看扩展方法的演变,-----------------------------

            String str2 = "abc";
            //string的Where方法的参数是一个Fun<T,bool>的委托,
            //1、首先创建一个委托
            Func<char, bool> func = (c) => c.ToString() == "a";

            //2、将委托的实例传给方法中
            var result = str2.Where(func);

            //调用
            foreach (var c in result)
            {
                MessageBox.Show(c.ToString());
            }

            //3、简化的写法
            var result2 = str2.Where(c => c.ToString() == "b");

            //调用
            foreach (var c in result2)
            {
                MessageBox.Show(c.ToString());
            }

            //-----------------将委托作为方法传入参数的实例-------------------------------
            //调用作为参数的方法,该方法传入的参数就是一个委托的实例
            this.Eat((a, b) => a * b);
        }
        private void button1_Click(object sender, EventArgs e)
        {
          //  this.test1();

            this.test2();
        }

        //方法中可以将委托作为参数
        public void Eat(Sum d)
        {
            MessageBox.Show(d(1, 2).ToString());

        }

        private void test2()
        {
            int[] aray = new int[] { 1, 2, 3 };
            var result2 = aray.Select((a, b) => (a.ToString() + "-" + b.ToString()));
            foreach (var r in result2)
            {
                MessageBox.Show(r);
            }
        }

    }
}

posted @ 2013-01-23 20:46  feidaochuanqing  阅读(109)  评论(0编辑  收藏  举报