C#委托delegate/Lambda表达式



委托解决指针解决的问题,但比指针安全

namespace DelegateDemo
{
    public delegate void Dele1(int i);//声明什么样的委托,前提是得有这样的方法
                                      //Dele1:void类型,参数只有一个int型的方法
    public delegate int Dele2(int i,double j);
    public delegate void Dele3(string s);
    public class Display
    {
        public void D1(int i)
        {
            Console.WriteLine("i是:{0}", i);
        }
        public int D2(int i, double j)
        {
            Console.WriteLine("i:{0},j:{1}", i, j);
            return 1;
        }
        public static int  D3(int i,double j) {
            Console.WriteLine("i:{0},j:{1}", i, j);
            return 1;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Display d = new Display();
            Dele1 d1 = new Dele1(d.D1);
            d1(4);
            Dele2 d2 = new Dele2(d.D2);
            d2(5, 2.8);
            Dele2 d3 = Display.D3;
            d3(7, 3.5);
            d2 += d3;           //d2和d3都是void类型时,才会实现方法的叠加
            d2(6, 9.0);

            //匿名委托
            Dele3 dele3 = delegate (string s)
            {
                Console.WriteLine(s);
            };
            dele3("Hello!");
        }
    }
}


Lambda表达式

如果用到,敬请百度
运算符“=>”,goes to
变量输入=>表达式/语句块(具体课本215页)

namespace LambdaDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] ints = new int[] { 2, 356, 78, 43, 78, 4 };
            var result = ints.OrderBy(x => x);//升序排列
            foreach(var item in result)
            {
                Console.Write(item+"\t");
            }
            Console.WriteLine();
           
            var result1 = ints.Average(x => x);//求平均值
            Console.WriteLine(result1);
        }
    }
}

推荐阅读更多精彩内容