C#中的委托

在C#中,委托(Delegate)是一种特殊的类型,它持有对方法的引用。委托可以指向静态方法、实例方法或Lambda表达式。它们在C#中用于实现回调机制、事件处理以及泛型方法的实现。

委托的主要特点包括:

  1. 类型安全:委托是强类型的,这意味着它们在编译时就确定了要引用的方法的签名。

  2. 多播:委托可以链接多个方法调用。当委托被调用时,它将按顺序调用所有链接的方法。

  3. 灵活性:委托可以用于将方法作为参数传递给其他方法,使得代码更加灵活和模块化。

  4. 匿名方法:可以使用Lambda表达式或匿名方法来定义委托,而不需要显式创建方法定义。

委托是一种引用类型,其实他是一个类,保存方法的指针,,他指向一个方法,当我们调用委托的时候,这个方法就立即被执行

实现委托的三个步骤

1.定义委托

2.实例化委托

3.执行委托

自定义委托

namespace _7._15day02
{
    public delegate double Add(double x, double y);
    internal class Program
    {
        public static double Add(double x, double y)
        {
            return x + y;
        }
        public static double Sub(double x, double y)
        {
​
            return x - y;
        }
        static void Main(string[] args)
        {
​
            Add add = new Add(Add);
            double result1 = add(12.0, 24.0);
            Console.WriteLine($"这个是加法的结果{result1:F2}");
            Add add1 = new Add(Sub);
            double result2 = add1(24.0, 12.0);
            Console.WriteLine($"这个是减法的结果{result2:F2}");
        }
    }
}
​

结果为

泛型委托类型

  1. Action:表示无返回值的方法。可以有0到16个参数。

  2. Func<>:表示有返回值的方法。可以有0到16个参数,并且最后一个参数是返回类型。

  3. Predicate<>:是 Func<T, bool> 的一个特殊形式,用于表示接受一个参数并返回布尔值的方法。

namespace _7._15day01
{
    internal class Program
    {
        public void print()
        {
            Console.WriteLine("print");
        }
        public int add(int x,int y)
        {
            return x+y;
        }
​
        static void a(int x, Action a)
        {
​
            a();
            Console.WriteLine(x);
        }
        static int b(int x, Func<int, int, int> s ,int a,int b)
        {
            return x + s(a, b);
        }
        static void Main(string[] args)
        {
            Program program = new Program();
            int x = 0;
            int a1 = 100;
            int b1= 100;
            int[] arr = {1,2,3,4,5,6,7};
            a(x, program.print);
           int result= b(20,  program.add,40,40);
            Console.WriteLine("-------------------------------");
            Console.WriteLine(result);
            
        }
    }
}
​

结果为

多播委托

多播委托 可以使用+=去增加方法

也可以使用 -=去删除方法

可以在一个委托里面加另一个委托 前提是这两个委托是同一个委托

相关推荐

  1. C#委托

    2024-07-16 02:22:02       25 阅读
  2. C# 委托

    2024-07-16 02:22:02       20 阅读
  3. C#委托概念以及例子

    2024-07-16 02:22:02       51 阅读
  4. Kotlin委托

    2024-07-16 02:22:02       48 阅读
  5. C#委托是什么?事件是不是一种委托

    2024-07-16 02:22:02       85 阅读
  6. 深入理解 C# Unity 事件和委托

    2024-07-16 02:22:02       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 02:22:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 02:22:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 02:22:02       57 阅读
  4. Python语言-面向对象

    2024-07-16 02:22:02       68 阅读

热门阅读

  1. Perl语言之标量

    2024-07-16 02:22:02       18 阅读
  2. 实习随笔【前端技术实现全局添加水印】

    2024-07-16 02:22:02       21 阅读
  3. (day17)其他分组不明确的题

    2024-07-16 02:22:02       21 阅读
  4. no-fee服务器玩转LLM

    2024-07-16 02:22:02       19 阅读
  5. lvs是什么

    2024-07-16 02:22:02       18 阅读
  6. UDP传输文件和FTP传输文件

    2024-07-16 02:22:02       20 阅读
  7. flutter Android端权限

    2024-07-16 02:22:02       19 阅读
  8. .NET在工控上位机开发中有哪些成功的案例?

    2024-07-16 02:22:02       23 阅读
  9. 最短路之朴素版的dij板子

    2024-07-16 02:22:02       18 阅读
  10. c++ 生成随机字符串

    2024-07-16 02:22:02       21 阅读
  11. 顺序表(C语言)

    2024-07-16 02:22:02       18 阅读
  12. 堆、栈和队列(数据结构)

    2024-07-16 02:22:02       21 阅读