• 深入理解C#中委托的使用及不同类型委托的应用示例


    在C#中,委托是一种强大而灵活的机制,可以引用一个或多个方法,并允许以类似函数指针的方式进行调用。委托在事件处理、回调函数和多线程编程等场景中非常有用。本文将深入探讨C#中委托的使用,并介绍不同类型委托的应用示例。
    在这里插入图片描述


    1. 单播委托(Singlecast Delegate)

    单播委托是最简单的委托类型,它只能引用一个方法。以下是使用单播委托的示例代码:

    delegate void MyDelegate(string message);
    
    class Program
    {
        static void Main(string[] args)
        {
            MyDelegate myDelegate = new MyDelegate(DisplayMessage);
            myDelegate("Hello, world!");
        }
    
        static void DisplayMessage(string message)
        {
            Console.WriteLine(message);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在上述示例中,我们定义了一个名为MyDelegate的单播委托类型,它可以引用一个没有返回值、接受一个字符串参数的方法。然后,我们创建了一个委托实例myDelegate,它引用了DisplayMessage方法。通过委托实例的调用,我们传递了一个字符串参数并执行了DisplayMessage方法。

    2. 多播委托(Multicast Delegate)

    多播委托是一种特殊的委托类型,可以引用多个方法,并按照添加的顺序依次调用这些方法。以下是使用多播委托的示例代码:

    delegate void MyDelegate(string message);
    
    class Program
    {
        static void Main(string[] args)
        {
            MyDelegate myDelegate = null;
            myDelegate += DisplayMessage1;
            myDelegate += DisplayMessage2;
    
            myDelegate("Hello, world!");
        }
    
        static void DisplayMessage1(string message)
        {
            Console.WriteLine($"Message 1: {message}");
        }
    
        static void DisplayMessage2(string message)
        {
            Console.WriteLine($"Message 2: {message}");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在上述示例中,我们定义了一个名为MyDelegate的多播委托类型,它可以引用一个没有返回值、接受一个字符串参数的方法。然后,我们创建了一个委托实例myDelegate,并将两个方法DisplayMessage1DisplayMessage2添加到委托实例中。通过委托实例的调用,我们会依次执行被引用的方法。

    3. 泛型委托(Generic Delegate)

    泛型委托是C#2.0新增的特性,它提供了一种类型安全的委托机制。可以将泛型委托理解为一种模板,可以用来引用任何可以匹配其签名的方法。以下是使用泛型委托ActionFunc的示例代码:

    class Program
    {
        static void Main(string[] args)
        {
            Action<string> displayMessageAction = DisplayMessage;
            displayMessageAction("Hello, world!");
    
            Func<int, int, int> addFunc = Add;
            int result = addFunc(3, 5);
            Console.WriteLine($"The sum is {result}");
        }
    
        static void DisplayMessage(string message)
        {
            Console.WriteLine(message);
        }
    
        static int Add(int a, int b)
        {
            return a + b;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在上述示例中,我们使用了ActionFunc这两个常用的泛型委托类型。Action表示一个没有返回值且接受一个T类型参数的方法;Func表示一个返回TResult类型值且接受T1T2类型参数的方法。通过泛型委托的使用,我们可以更加灵活地引用不同类型的方法。

    总结

    委托是C#中的重要特性,它提供了一种方便而强大的方式来引用和调用方法。本文详细介绍了单播委托、多播委托和泛型委托的使用,并提供了相应的示例代码。通过掌握委托的不同类型及其用法,您将能够更好地利用委托来解决各种编程问题,并提高代码的可扩展性和维护性。

  • 相关阅读:
    java基于ssm的 大学生社团管理系统 elementui 前后端分离
    基于粒子群优化的BP神经网络(分类应用) - 附代码
    ftplib模块--ftp密码爆破
    源码安装包缺失pcre库或者版本低的问题
    oracle存储过程记录
    Web应用程序,简单的日志系统解决方案
    Zookeeper的数据结构以及常用命令使用
    在实际应用中联合体union的妙用
    【计算机毕业设计】基于HTML+CSS+JavaScript大学生心理咨询网设计毕业论文源码
    前端常用的几种布局方式(易懂版)
  • 原文地址:https://blog.csdn.net/qq_22120623/article/details/133169708