C#---第十七课:委托delegate、匿名函数、Lambda函数、事件的使用

本文详细介绍了委托在C#中的基本概念,如何创建、指向并调用不同函数,包括匿名函数、Lamda表达式和事件的运用实例。深入探讨了委托作为参数传递的功能,以及在事件驱动编程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 委托的使用基础

1.委托是一个引用,这个引用可以指向不同的函数。最终通过改变指向就可以通过一个委托调用了不同的函数。
2.创建委托的时候,需要确定返回值、参数(类型及参数个数)


namespace AlienDemo
{
    internal class AlienDemoClass
    {
        public static int Addition(int a, int b)
        {
            return a + b;
        }

        public static int Subtraction(int a, int b)
        {
            return a - b;
        }

		// 如下的委托,返回值、参数都与上面两个函数完全一直。最终可以将这个委托指向如上两个函数
        delegate int MyDelegate(int a, int b);

        static void Main(string[] args)
        {
            MyDelegate delegate01 = Addition;
            MyDelegate delegate02 = Subtraction;
            Console.WriteLine(delegate01(1, 3));
            Console.WriteLine(delegate02(5, 2));

            Console.ReadKey();
        }
    }
}


4
3




委托的指向也是可以修改的:


        static void Main(string[] args)
        {
            MyDelegate delegate01 = Addition;
            MyDelegate delegate01 = Subtraction;
            Console.WriteLine(delegate01(3, 1));

            Console.ReadKey();
        }


// 2



2. 委托的应用—将委托委托函数的参数(路由的作用)


namespace AlienDemo
{
    internal class AlienDemoClass
    {
        public static int Addition(int a, int b)
        {
            return a + b;
        }

        public static int Subtraction(int a, int b)
        {
            return a - b;
        }

        delegate int MyDelegate(int a, int b);

        static int Calculate(int a, int b, MyDelegate Cal)
        {
            return Cal(a, b);
        }

        static void Main(string[] args)
        {
            Console.WriteLine(Calculate(3, 1, Subtraction));
            Console.ReadKey();
        }
    }
}




3. 匿名函数—利用委托的函数


namespace AlienDemo
{
    internal class AlienDemoClass
    {
        delegate int MyDelegate(int a, int b);

		// 通过已经创建好的委托,创建函数体
        static MyDelegate MyCal = delegate (int a, int b)
        {
            return a * b;
        };

        static void Main(string[] args)
        {
            Console.WriteLine(MyCal(3, 5));
            Console.ReadKey();
        }
    }
}

// 15



4. Lamda函数


namespace AlienDemo
{
    internal class AlienDemoClass
    {
        delegate int MyDelegate(int a, int b);


		// 注意,通过委托创建的Lamda函数
        static MyDelegate MyCal = (int a, int b) =>
        {
            return a * b;
        };

        static void Main(string[] args)
        {
            Console.WriteLine(MyCal(3, 5));
            Console.ReadKey();
        }
    }
}

// 15



5. 事件 event

事件的本质是一个触发点,最终这个触发点能触发多少个动作,是由这个事件绑定了多少动作决绝的。


namespace AlienDemo
{
    internal class AlienDemoClass
    {
        delegate void MyDelegate(string name);

        static event MyDelegate MyEvent;

        static void Func_01(string name)
        {
            Console.WriteLine("======={0}======", name);
        }
        static void Func_02(string name)
        {
            Console.WriteLine("hello world:{0}", name);
        }

        static void Main(string[] args)
        {
            MyEvent += Func_01;
            MyEvent += Func_02;		// 绑定某个函数
            MyEvent -= Func_02;		// 解绑某个函数
            
            MyEvent("Alien");
            Console.ReadKey();
        }
    }
}


// =======Alien======

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello-alien

您的鼓励,是我最大的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值