C# 通过Delegate,action,func关键字创建委托匿名方法

本文主要是介绍C# 通过Delegate,action,func关键字创建委托匿名方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在C#中,委托(Delegate)是一种用于封装方法的类型,它可以让我们将方法当作参数传递,也可以将方法作为返回值。在C#中,Action和Func是两种特殊的委托类型,它们分别用于表示没有返回值的函数和有返回值的函数。

本文将详细介绍如何在C#中使用Delegate、Action和Func关键字创建委托匿名方法。

1. 委托(Delegate)

委托是一种用于封装方法的类型,它可以将方法当作参数传递,也可以将方法作为返回值。委托的本质是一个类,它包含了一个方法指针(Method Pointer),这个方法指针指向了一个具体的方法。

下面是一个简单的委托示例:

public delegate void MyDelegate(string message);

这个委托名为MyDelegate,它接受一个字符串参数,并没有返回值。

2. 匿名方法

匿名方法是一种没有名称的方法,它通常用于传递给委托或事件。匿名方法可以通过lambda表达式或使用delegate关键字定义。

使用lambda表达式创建匿名方法

Lambda表达式是一种简洁的匿名方法表示方式。下面是一个使用lambda表达式创建匿名方法的示例:

public void SayHello(string message)
{Console.WriteLine(message);
}public void ExecuteDelegate(MyDelegate del)
{del("Hello, World!");
}public void Main()
{ExecuteDelegate(() => SayHello("Hello, C#!")); // 使用lambda表达式创建匿名方法
}

在这个示例中,我们定义了一个SayHello方法,一个ExecuteDelegate方法,以及一个Main方法。在Main方法中,我们使用lambda表达式创建了一个匿名方法,并将其传递给ExecuteDelegate方法。

使用delegate关键字创建匿名方法

除了使用lambda表达式,我们还可以使用delegate关键字定义匿名方法。下面是一个使用delegate关键字创建匿名方法的示例:

public delegate void MyDelegate(string message);public void SayHello(string message)
{Console.WriteLine(message);
}public void ExecuteDelegate(MyDelegate del)
{del("Hello, World!");
}public void Main()
{MyDelegate myDel = delegate(string message){SayHello(message);};ExecuteDelegate(myDel); // 使用delegate关键字创建匿名方法
}

在这个示例中,我们使用delegate关键字定义了一个匿名方法,并将其传递给ExecuteDelegate方法。

3. Action和Func

Action和Func是两种特殊的委托类型,它们分别用于表示没有返回值的函数和有返回值的函数。

Action

Action是一个接受一个特定类型T的参数,并且没有返回值的委托。下面是一个Action的示例:

public delegate void Action<T>(T obj);

Func<T, TResult>

Func<T, TResult>是一个接受一个特定类型T的参数,并返回一个特定类型TResult的委托。下面是一个Func<T, TResult>的示例:

public delegate TResult Func<T, TResult>(T obj);

使用Action和Func创建匿名方法

下面是一个使用Action和Func创建匿名方法的示例:

public void SayHello(string message)
{Console.WriteLine(message);
}public int Add(int a, int b)
{return a + b;
}public void Main()
{Action<string> action = SayHello; // 使用Action创建匿名方法action("Hello, World!");Func<int, int, int> func = Add; // 使用Func创建匿名方法int result = func(3, 4);Console.WriteLine("Result: " + result);
}

在这个示例中,我们使用Action和Func创建了两个匿名方法,并分别调用了SayHello和Add方法。

总结:

在C#中,委托(Delegate)是一种用于封装方法的类型,它可以将方法当作参数传递,也可以将方法作为返回值。Action和Func是两种特殊的委托类型,它们分别用于表示没有返回值的函数(Action)和有返回值的函数(Func<T, TResult>)。
Delegate、Action和Func关键字提供了一种灵活的方式来创建和使用匿名方法。通过lambda表达式和delegate关键字,你可以定义简单的或复杂的匿名方法,并根据需要使用它们。Action和Func委托类型分别用于表示没有返回值和有返回值的方法。掌握这些概念,你可以更灵活地使用C#的函数式编程特性。

这篇关于C# 通过Delegate,action,func关键字创建委托匿名方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923578

相关文章

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶