c#中的泛型委托详解

下面是对泛型委托在C#中的详细讲解及示例说明:

泛型委托的概念

泛型委托(Generic Delegate)是一个带有泛型参数的委托,具有良好的扩展性和通用性,可以适配各种需求,使代码更加简洁、灵活。在泛型委托的定义中,可以指定一个或多个泛型类型参数,可以用于引用任意返回值和参数的委托类型。

在C#中,使用Func<>Action<>两种泛型委托类型来表示任意函数引用和无返回值函数引用。

Func<>委托类型可用于引用任意带返回值的方法,其定义为:

public delegate TResult Func<out TResult>();
public delegate TResult Func<in T, out TResult>(T arg);
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);
……

其中,第一个参数 TResult 表示委托返回类型,out 表示返回类型,其余参数类型 TT1T2 等为委托参数类型,in 表示输入类型。

Action<> 委托类型可用于引用任意无返回值的方法,其定义为:

public delegate void Action();
public delegate void Action<in T>(T arg);
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);
……

Func<> 类似,Action<> 委托也是带有泛型类型参数的,且泛型参数末尾必须是返回类型 Void,表示这是一个无返回值的方法。

示例说明

以下是两个示例说明泛型委托在C#中的使用:

示例一:使用 Func<> 委托类型

在示例一中,使用 Func<> 委托类型引用 int 类型的加法和除法方法,并对两个数进行计算。代码如下所示:

using System;

class Program
{
    static void Main(string[] args)
    {
        Func<int, int, int> add = (a, b) => a + b;    //定义加法方法
        Func<int, int, int> divide = (a, b) => a / b; //定义除法方法

        int num1 = 6, num2 = 2;

        Console.WriteLine("两数之和:{0}", add(num1, num2));
        Console.WriteLine("两数之商:{0}", divide(num1, num2));

        Console.ReadKey();
    }
}

在代码中,定义 adddivide 两个 Func<> 委托变量分别引用 int 类型的加法和除法方法。对于 add 变量,使用 => 表示 Lambda 表达式,将 a + b 表示为其方法体。对于 divide 变量,使用 => 表示 Lambda 表达式,将 a / b 表示为其方法体。

Main 方法中,定义 num1num2 两个整型变量,调用 adddivide 方法对两个数进行计算,并输出结果。运行程序,会得到以下输出结果:

两数之和:8
两数之商:3

示例二:使用 Action<> 委托类型

在示例二中,使用 Action<> 委托类型引用 string 类型的转换方法,并将转换结果输出。代码如下所示:

using System;

class Program
{
    static void Main(string[] args)
    {
        Action<string> toUpperCase = (str) => Console.WriteLine(str.ToUpper()); //定义转换为大写字母方法
        Action<string> toLowerCase = (str) => Console.WriteLine(str.ToLower()); //定义转换为小写字母方法

        string str = "Hello, World!";

        toUpperCase(str);
        toLowerCase(str);

        Console.ReadKey();
    }
}

在代码中,定义 toUpperCasetoLowerCase 两个 Action<> 委托变量分别引用 string 类型的转换为大写字母和小写字母的方法。对于 toUpperCase 变量,使用 => 表示 Lambda 表达式,将 Console.WriteLine(str.ToUpper()) 表示为其方法体。对于 toLowerCase 变量,使用 => 表示 Lambda 表达式,将 Console.WriteLine(str.ToLower()) 表示为其方法体。

Main 方法中,定义 str 字符串变量,调用 toUpperCasetoLowerCase 方法对字符串进行转换,并输出结果。运行程序,会得到以下输出结果:

HELLO, WORLD!
hello, world!

以上是使用 C# 中的泛型委托进行编程的示例。通过使用泛型委托可以减少编写大量不同类型的委托的工作,并提高代码的灵活性和通用性,使得代码更加简洁高效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#中的泛型委托详解 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • 使用C#正则表达式获取必应每日图片地址

    下面是使用C#正则表达式获取必应每日图片地址的完整攻略。 1. 确定获取的页面 每日图片地址是在必应的主页上展示的,我们需要确定获取的页面地址为 https://cn.bing.com/。 2. 发起HTTP请求获取页面内容 我们需要使用C#中的HttpClient类,通过其GetAsync方法获取页面内容。 示例代码: HttpClient httpCli…

    C# 2023年6月8日
    00
  • 使用Supervisor守护ASP.NET Core应用程序进程

    使用Supervisor守护ASP.NET Core应用程序进程 Supervisor是一个进程控制系统,可以帮助您管理和监控应用程序进程。在本攻略中,我们将讨论如何使用Supervisor守护ASP.NET Core应用程序进程,并提供两个示例说明。 步骤一:安装Supervisor 在将ASP.NET Core应用程序进程守护到Supervisor之前,…

    C# 2023年5月17日
    00
  • c# webapi 配置swagger的方法

    接下来我将为你详细讲解如何配置Swagger来生成C# Web API文档的步骤和示例。 配置Swagger的方法 步骤一:安装Swagger 首先,你需要通过NuGet安装以下两个软件包:Swashbuckle.AspNetCore和Swashbuckle.AspNetCore.Annotations。 安装方式如下: Install-Package Sw…

    C# 2023年5月15日
    00
  • C#实现的Excel文件操作类实例

    C#实现的Excel文件操作类实例 概述 在C#开发中,操作Excel文件是很常见的需求,为了方便Excel文件的操作,可以自己编写Excel文件操作类。 实现步骤 1. 安装EPPlus插件 EPPlus是一个用于操作Excel文件的库,可以使用NuGet安装。在Visual Studio中打开NuGet包管理器,搜索EPPlus安装即可。 2. 创建Ex…

    C# 2023年5月31日
    00
  • C#中Invoke 和 BeginInvoke 的真正涵义

    下面是详细的讲解“C#中Invoke和BeginInvoke的真正涵义”的攻略。 Invoke和BeginInvoke的概述 在C#中,Invoke和BeginInvoke是两个常用的方法,用于在UI线程上执行操作。它们的主要目的是“跨线程访问UI控件”,因为在Windows Forms、WPF、ASP.NET Web Forms等应用程序中,只能在创建UI…

    C# 2023年6月7日
    00
  • 利用Arduino制作音乐播放+随节奏闪光仪器实现

    1.实验器材 Arduino开发板,面包板一块,杜邦线若干,LED灯若干,220欧电阻若干,蜂鸣器一个。 2.实验操作 将六个led灯的正极依次接到arduino板I/O接口的2-7口, 电源负极依分别接一个220欧的电阻 。 整体负极接arduino板的GND接口。 蜂鸣器正极接arduino板I/O接口的8口,负极接GND。 3.代码实现 int buz…

    C# 2023年4月25日
    00
  • C#实现的简单随机数产生器功能示例

    下面我将为您详细讲解如何实现C#的随机数产生器功能示例。 1. 什么是随机数 随机数是指在一定范围内的数字,由于没有特定的规律和模式,所以看起来就像是随机产生的数字。在程序设计中,随机数被广泛应用于生成随机数据,加密算法,游戏开发等领域。 2. C#实现随机数产生器 在C#中,产生随机数可以使用Random类。下面是一个简单的示例,演示了如何使用Random…

    C# 2023年6月7日
    00
  • C#读写EXCEL单元格的问题实现

    下面是“C#读写EXCEL单元格的问题实现”的完整攻略。 1. 安装依赖 首先需要在项目中安装 EPPlus 包,它是一款用于读写Excel文件的开源包。可以在NuGet中搜索 EPPlus 进行安装。 2. 读取Excel文件 假设我们有一个Excel文件,路径为 D:\test.xlsx,我们需要读取其中的内容。 2.1. 加载Excel文件 FileI…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部