C#关于Func和Action委托的介绍详解

C#关于Func和Action委托的介绍详解

什么是委托

委托是一种可以存储并引用方法的数据类型。换句话说,委托使得我们可以把一个方法作为参数传递给另一个方法或者把一个方法存储在一个变量中。

在C#中,我们可以使用delegate关键字来定义一个委托类型。委托类型的定义和方法的定义类似,但是没有方法体。例如:

delegate void MyDelegate(int x);

定义了一个名为MyDelegate的委托类型,该委托类型可以接受一个int类型参数,并且不返回任何值。

Action委托

在C#中,有两种常用的委托类型:ActionFunc。其中,Action委托表示不返回任何值的方法,也可以看做是一个没有参数和返回值的委托。

Action委托没有返回值,因此不能用于需要返回值的方法。例如:

void MyMethod(int x)
{
    Console.WriteLine($"MyMethod received {x}.");
}

Action<int> myAction = new Action<int>(MyMethod);
myAction(42);

上面的代码定义了一个Action<int>类型的委托myAction,其参数类型为int,并将其初始化为一个指向方法MyMethod的委托。随后,我们可以通过myAction(42)来调用MyMethod方法并传递参数42。

Func委托

Func委托表示一个带有返回值的方法,且最后一个泛型参数表示方法的返回类型。例如:

int MyMethod(int x)
{
    return x * 2;
}

Func<int, int> myFunc = new Func<int, int>(MyMethod);
Console.WriteLine(myFunc(5)); //输出10

上面的代码定义了一个Func<int, int>类型的委托myFunc,其第一个泛型参数表示方法的参数类型,第二个泛型参数表示方法的返回类型,并将其初始化为一个指向方法MyMethod的委托。随后,我们可以通过myFunc(5)来调用MyMethod方法并传递参数5,并输出返回的结果10。

示例1:将委托作为方法参数

下面的代码示例演示了如何将一个委托作为方法参数,并在方法中调用该委托。

void MyMethod(int x, Action<int> myAction)
{
    Console.WriteLine($"MyMethod received {x}.");
    myAction(x);
}

void PrintInt(int x)
{
    Console.WriteLine($"The input value is {x}.");
}

MyMethod(42, new Action<int>(PrintInt));

上面的代码中,MyMethod方法接受两个参数:一个整数类型的参数和一个Action<int>类型的委托。在方法中,我们先输出了传入的整数参数,然后调用了传入的myAction委托。随后,我们调用MyMethod方法并传递了一个整数42以及一个指向PrintInt方法的委托。

示例2:使用Lambda表达式创建委托

下面的代码示例演示了如何使用Lambda表达式来创建一个委托。

Func<int, int> myFunc = x => x * 2;
Console.WriteLine(myFunc(5)); //输出10

上面的代码中,我们定义了一个Func<int, int>类型的委托myFunc,利用Lambda表达式的形式指定myFunc所代表的方法,并将Lambda表达式赋值给myFunc。随后,我们可以通过myFunc(5)来调用Lambda表达式中定义的方法,并输出返回的结果10。

结论

在C#中,委托是一种常用的数据类型,可以把一个方法作为参数传递给另一个方法或者把一个方法存储在一个变量中。Action委托表示不返回任何值的方法,Func委托则表示一个带有返回值的方法。还可以使用Lambda表达式来方便地创建委托。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#关于Func和Action委托的介绍详解 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • .Net 文本框实现内容提示的实例代码(仿Google、Baidu)

    下面是详细的攻略: 思路 在.NET中,实现文本框的内容提示很简单,只需要使用TextBox和ToolTip控件即可。具体思路如下: 使用TextBox控件来创建文本框 使用ToolTip控件来创建提示框 当用户输入文本时,根据输入的内容动态更新提示框中的内容 示例说明 示例1:基本的文本框实现内容提示 以仿Google、Baidu的内容提示为例,我们可以在…

    C# 2023年5月31日
    00
  • 提取HTML代码中文字的C#函数

    提取HTML代码中的文字可以通过正则表达式来实现,C#中可以使用System.Text.RegularExpressions命名空间下的Regex类来操作正则表达式。 下面是提取HTML中文字的C#函数的完整攻略: 步骤一:引用命名空间和类库 using System.Text.RegularExpressions; 步骤二:编写提取HTML中文字的函数 p…

    C# 2023年5月31日
    00
  • c#反射表达式树模糊搜索示例

    C#反射表达式树是一种非常强大的工具,它能够在运行时动态创建代码,可以在一些需要动态生成代码的场景中提供巨大的便利。其中,模糊搜索是一类比较常见的场景。下面,将详细讲解如何使用C#反射表达式树进行模糊搜索。 前置知识 在学习C#反射表达式树进行模糊搜索之前,需要掌握以下知识点: C#中的反射机制 C#中的表达式树 Linq表达式 示例一:使用表达式树进行模糊…

    C# 2023年6月1日
    00
  • C#实现简单的飞行棋游戏

    我们来简要讲解如何实现一个简单的飞行棋游戏。 1. 游戏规则分析 在开始实现游戏前,我们需要先对飞行棋的规则进行分析: 游戏玩家为2~4人。 每个玩家都有4个棋子,初始位置位于起点。 按照顺时针方向轮流掷骰子,掷到6的可以将棋子从起点移动到起点以外的地方;其它点数则表示棋子可以向前移动相应的步数。 某个棋子走到了别人的棋子位置,就可以将别人的棋子送回起点,自…

    C# 2023年6月6日
    00
  • ASP.NET Core中引用OpenAPI服务的添加示例

    ASP.NET Core中引用OpenAPI服务的添加示例 OpenAPI是一种用于描述RESTful API的规范。在ASP.NET Core中,可以使用Swashbuckle.AspNetCore包来生成OpenAPI文档。本攻略将提供一些示例,演示如何在ASP.NET Core中引用OpenAPI服务。 步骤 步骤1:创建一个新的ASP.NET Cor…

    C# 2023年5月17日
    00
  • C# 爬虫简单教程

    关于“C#爬虫简单教程”的完整攻略,可以分为以下几个步骤: 1. 确定需求和目标 在开始写爬虫之前,首先需要确定爬虫的目标和需求,例如要爬取哪些网站,获取哪些数据,以及存储数据的方式等等。在确定需求的基础上,就可以开始编写代码了。 2. 安装和准备开发环境 使用C#编写爬虫,需要安装.Net框架和Visual Studio开发环境。具体安装过程可以参考微软官…

    C# 2023年5月15日
    00
  • 在.net core中实现字段和属性注入的示例代码

    在.NET Core中,我们可以使用依赖注入的方式将依赖关系注入到对象中,包括字段和属性注入。以下是在.NET Core中实现字段和属性注入的示例代码的攻略。 1. 创建一个接口 首先,我们需要定义一个接口,它将被注入到我们的类中。此处示例中,我们创建了一个名为 ILogger 的接口,用于记录日志。 public interface ILogger { v…

    C# 2023年5月31日
    00
  • ToLua框架下C#与Lua代码的互调操作

    ToLua是一款在Unity3D游戏引擎中使用的框架,它支持C#和Lua之间的相互调用和交互。下面我们来介绍ToLua框架下C#与Lua代码的互调操作的完整攻略。 步骤一:在Unity项目中配置ToLua 首先需要在Unity项目中下载并导入ToLua插件,导入完成后需要在菜单栏依次打开 ToLua/Generate All 按钮来生成适合Lua调用的C#代…

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