C# 委托,匿名函数,Lambda表达式

委托

我们先在C#中写一个委托,关键字delegate

    delegate void TestDelegate();

委托就是方法的类型

我们现在实现委托

    class Program
    {
        static void Main(string[] args)
        {
            //实例化这个委托,参数就填和委托方法返回值和参数类型一样的方法名字
            TestDelegate Test = new TestDelegate(Test1);
        }

        public static void Test1()
        {
            Console.WriteLine("Test1");
        }
    }

这样就实现了一个委托

我们调用这个委托方法也很简单

Test();

这一步学会之后,我们学着简化之前的写法,new是可以不写的,直接赋值

    class Program
    {
        static void Main(string[] args)
        {
            TestDelegate Test = Test1;
        }
    }

组合委托

    class Program
    {
        static void Main(string[] args)
        {
            TestDelegate Test = Test1;

            //再添加一个方法
            Test+=Test2;
            //现在就回执行两个方法
            Test();

            //同样的,删除就是-=
            Test-=Test1;
        }
    }
    

    public static void Test2(){
    
         Console.WriteLine("Test2");
    }

匿名函数

我们写两个委托,来学习匿名函数的使用

一个是无返回值无参数,一个是有返回值有参数的

     delegate void TestDelegate1();
     delegate int TestDelegate2(int a,int b);

这次我们不写实体方法了,我们用匿名方法来写

    class Program
    {
        static void Main(string[] args)
        {
            //这个是无参数,无返回值的写法
            TestDelegate1 Test1 = delegate(){
                //这是一个无参数无返回值匿名方法
            };

            //这个是有参数,有返回值
            TestDelegate2 Test2 = delegate(int x,int y){
                //这是一个有参数有返回值匿名方法
                //记得给返回值
                return ;
            }
        }
    }

匿名函数基本不用的,但是学习匿名函数,是为啥!?

为了给Lambda表达式过度.

嘿嘿!逃过不的.

Lambda表达式

还是先声明委托

     delegate void TestDelegate1();
     delegate int TestDelegate2(int a,int b);

我们这次用Lambda表达式简化匿名方法

    class Program
    {
        static void Main(string[] args)
        {
            //这个是无参数,无返回值的写法
            TestDelegate1 Test1 = ()=>{ //这是一个无参数无返回值匿名方法};

            //这个是有参数,有返回值
            TestDelegate2 Test2 =(int x, int y)=>{
                //这是一个有参数有返回值匿名方法
                //记得给返回值
                return x+y;
            }
        }
    }

好像只是省略了一个关键字,没什么了不起是吧

来我们继续简化

Lambda表达式简化

还能简化,嘿嘿

简化1:如果Lambda表达式方法体中只有一个返回值,那么(大括号和return可以省略)

  TestDelegate2 Test2 =(int x, int y)=>x+y;

简化2:Lambda的参数列表,参数类型可以省略不写

  TestDelegate2 Test2 =(x, y)=>x+y;

简化3:在Lambda中,如果参数列表中,参数只有一个,那么参数列表的小括号也可以省略

我省略掉类,还有Main方法,直接写了

delegate int TestDelegate3(int a);

TestDelegate3 test3 = x=>x*x;

我们调用,结果是4哈.

Test3(2);

猜你喜欢

转载自blog.csdn.net/Liu_ChangC/article/details/121745813