【C#学习】delegate(委托) 和 event(事件)

本文详细探讨了C#中的委托(Delegate)和事件(Event),包括委托的定义、实例化、多播,以及如何通过匿名方法和Lambda表达式使用委托。同时,讲解了委托在参数和返回值中的传递,以及事件的发布和订阅机制。

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

C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。在C#中方法不能作为参数直接传递,必须使用委托(用来委托方法)。delegate(委托)是一种特殊的引用类型,它将方法也作为特殊的对象封装起来,从而将方法作为变量、参数或者返回值传递。委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。使用一个委托有三个步骤: 

  1. 定义委托
  2. 实例化委托
  3. 将指定的方法添加到委托对象中
例子:

        delegate int plus(int x, int y); // 1. 定义委托

        static void Main(string[] args)
        {
            plus del_p;  // 2. 实例化委托

            del_p = new plus(addition);  // 3. 将方法添加到实例化委托对象中

            int n = del_p(1, 2);
            Console.Write(n);
        }

        static int addition(int x, int y)
        {
            return x + y;  
        }

C#允许直接把方法名赋给委托,所以下面的三种写法也正确:

            plus del_p = new plus(addition);
            plus del_p2 = addition;
            del_p = addition; 

委托完全可以被当做普通类型对待,比如可以加减、赋值、构建数组。

委托数组

委托可以构建数组,意味着一组同样返回类型和参数类型的方法。
        delegate int MathFunc(int x, int y); 

        static void Main(string[] args)
        {
            MathFunc[] fs = new MathFunc[]
            {
                substract, 
                addition, 
                product,
                division
            };

            int n = fs[0](1, 2); // -1
        }

        static int division( int x, int y)
        {
            return x / y;
        }

        static int substract(int x, int y)
        {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值