当前位置: 首页 > news >正文

C#委托介绍

在 C# 里,委托是一种引用类型,它能够封装一个或多个方法。委托可以把方法当作参数传递给其他方法,这就使得方法的调用更为灵活。下面从几个方面为你介绍 C# 委托:

1. 声明委托

委托的声明和方法类似,不过要以delegate关键字开头。以下是一个简单的委托声明示例:

// 声明一个委托,它可以封装返回值为int,参数为两个int类型的方法
delegate int MathOperation(int a, int b);

2. 创建委托实例

声明好委托后,你就可以创建委托的实例,并且把一个符合委托签名的方法赋值给它。示例如下:

class Program
{
    // 定义一个符合委托签名的方法
    static int Add(int a, int b)
    {
        return a + b;
    }

    static void Main()
    {
        // 创建委托实例,并将Add方法赋值给它
        MathOperation operation = Add;

        // 调用委托实例
        int result = operation(3, 5);
        Console.WriteLine("3 + 5 = " + result);
    }
}

3. 多播委托

委托还支持多播,也就是一个委托实例可以封装多个方法。通过+=-=运算符,你能够添加或移除方法。示例如下:

class Program
{
    static void Method1()
    {
        Console.WriteLine("Method1 is called.");
    }

    static void Method2()
    {
        Console.WriteLine("Method2 is called.");
    }

    static void Main()
    {
        // 声明一个无参数、无返回值的委托
        Action multiCastDelegate = Method1;

        // 添加一个方法到委托实例
        multiCastDelegate += Method2;

        // 调用委托实例,会依次调用封装的所有方法
        multiCastDelegate();

        // 移除一个方法
        multiCastDelegate -= Method1;

        // 再次调用委托实例
        multiCastDelegate();
    }
}

4. 内置委托类型

C# 提供了一些内置的委托类型,像ActionFunc,这样你就不用每次都声明新的委托类型了。

Action:用于封装无返回值的方法,可接受最多 16 个参数;

// 声明一个接受两个int类型参数,无返回值的Action委托实例
Action<int, int> printSum = (a, b) => Console.WriteLine(a + b);
printSum(2, 4);

Func:用于封装有返回值的方法,最后一个类型参数表示返回值类型,前面的类型参数表示方法的参数类型,可接受最多 16 个参数。

// 声明一个接受两个int类型参数,返回值为int类型的Func委托实例
Func<int, int, int> multiply = (a, b) => a * b;
int product = multiply(3, 6);
Console.WriteLine("3 * 6 = " + product);

相关文章:

  • 算法数论.3(拓展欧几里得,中国剩余定理)
  • 搭建第一个Spring项目
  • 题解:AT_abc170_f [ABC170F] Pond Skater
  • Linux中执行 ifconfig 命令时提示 “未找到命令”
  • 无人设备遥控器之调度自动化技术篇
  • MCP(大模型上下文协议)
  • C++ 的基本内置类型(十二)
  • springboot body 转对象强验证属性多余属性抛错误
  • [NO-WX179]基于springboot+微信小程序的在线选课系统
  • msvcp140.dll是什么文件?修复丢失msvcp140.dll的方法指南
  • Python FastAPI 面试题及参考答案
  • [CLS] Token 在 ViT(Vision Transformer)中的作用与实现
  • 模拟算法专题
  • 机器学习实战,涉及数据预处理、监督算法、无监督算法、模型评估与改进-思维导图
  • 【2025年第三期】全国数字人才技能提升师资培训班邀请函
  • LangChain其它五类组件详解(6)—— 查询分析(Query analysis)
  • uni-app常用模板
  • Redis(Remote Dictionary Server)
  • C#更新Nginx SSL证书
  • nestjs 多环境配置
  • 为小龙虾洗清这些“黑锅”,这份科学吃虾指南请收好
  • 携程:今年第一季度营业收入约138亿元,入境旅游预订同比增长超100%
  • 东南亚五大经济体一季度增长放缓,美国关税大棒或阻全年增长
  • 特朗普与普京开始电话会谈,稍后将致电泽连斯基
  • 世卫大会连续9年拒绝涉台提案
  • 这个死亡率第一的“老年病”,正悄悄逼近年轻人