运维开发网

c带有内置泛型委托的操作委托

运维开发网 https://www.qedev.com 2022-07-18 21:53 出处:网络
这篇文章介绍了C#内置泛型委托之Action委托的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 1、什么是Action泛型委托

这篇文章介绍了C#内置泛型委托之Action委托的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 1、什么是Action泛型委托

Actionlt。Tgt是的内置泛型委托。NET框架,并且可以使用ActionltTgt委托将方法作为参数传递,而不是显示声明自定义项的委托。封装的方法必须对应于此委托定义的方法签名。也就是说,封装的方法必须有一个通过值传递给它的参数,并且它不能有返回值。

2、Action委托定义

要查看操作的定义:

using System.Runtime.CompilerServices;namespace System{ // // 摘要: // 封装一个方法,该方法不具有参数且不返回值。 [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")] public delegate void Action();}

你会发现Action其实是一个没有返回值的委托。

3、示例

操作至少委托0个参数,最多委托16个参数,没有返回值。

Action表示没有参数和返回值的委托。

Actionlt。int,stringgt表示带有传入参数int int、无返回值的字符串的委托。

Actionlt。int,string,boolgt表示已传入参数int、string、bool且无返回值的委托。

Actionlt。int,int,int,intgt表示传入了四个int参数但没有返回值的委托。


代码示例如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ActionDemo{ class Program { static void Main(string[] args) { // 无参数无返回值的委托 Action action1 = new Action(ActionWithNoParaNoReturn); action1(); Console.WriteLine("----------------------------"); // 使用delegate Action action2 = delegate { Console.WriteLine("这里是使用delegate"); }; // 执行 action2(); Console.WriteLine("----------------------------"); // 使用匿名委托 Action action3 = () =gt; { Console.WriteLine("这里是匿名委托"); }; action3(); Console.WriteLine("----------------------------"); // 有参数无返回值的委托 Actionlt;intgt; action4 = new Actionlt;intgt;(ActionWithPara); action4(23); Console.WriteLine("----------------------------"); // 使用delegate Actionlt;intgt; action5 = delegate (int i) { Console.WriteLine($"这里是使用delegate的委托,参数值是:{i}"); }; action5(45); Console.WriteLine("----------------------------"); // 使用匿名委托 Actionlt;stringgt; action6 = (string s) =gt; { Console.WriteLine($"这里是使用匿名委托,参数值是:{s}"); }; action6("345"); Console.WriteLine("----------------------------"); // 多个参数无返回值的委托 Actionlt;int, stringgt; action7 = new Actionlt;int, stringgt;(ActionWithMulitPara); action7(7, "abc"); Console.WriteLine("----------------------------"); // 使用delegate Actionlt;int, int, stringgt; action8 = delegate (int i1, int i2, string s) { Console.WriteLine($"这里是三个参数的Action委托,参数1的值是:{i1},参数2的值是:{i2},参数3的值是:{s}"); }; action8(12, 34, "abc"); Console.WriteLine("----------------------------"); Actionlt;int,int,string, stringgt; action9 = (int i1,int i2, string s1,string s2) =gt; { Console.WriteLine($"这里是使用四个参数的委托,参数1的值是:{i1},参数2的值是:{i2},参数3的值是:{s1},参数4的值是:{s2}"); }; // 执行委托 action9(34,56, "abc","def"); Console.ReadKey(); } static void ActionWithNoParaNoReturn() { Console.WriteLine("这是无参数无返回值的Action委托"); } static void ActionWithPara(int i) { Console.WriteLine($"这里是有参数无返回值的委托,参数值是:{i}"); } static void ActionWithMulitPara(int i,string s) { Console.WriteLine($"这里是有两个参数无返回值的委托,参数1的值是:{i},参数2的值是:{s}"); } }}

运行结果:


4、真实示例

先看下面这张截图:


从截图可以看出,ForEach()方法的参数是一个Action委托,参数类型为T,没有返回值。在下面的示例中,操作委托用作传递给ForEach()方法的参数。

1.定义学生实体类。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ActionDemo{ public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public int Sex { get; set; } }}

2.使用ForEach()方法输出设置的内容。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ActionDemo{ public class ActionTest { public static void Test() { Listlt;Studentgt; list = new Listlt;Studentgt;() { new Student(){Id=1,Name="张三",Age=19,Sex=1}, new Student(){Id=2,Name="李四",Age=20,Sex=2}, new Student(){Id=3,Name="王五",Age=23,Sex=1}, new Student(){Id=4,Name="赵六",Age=18,Sex=1} }; // Actionlt;Studentgt;委托作为参数传递给ForEach()方法 list.ForEach(student =gt; { Console.WriteLine($"姓名:{student.Name},年龄:{student.Age}"); }); } }}

3.调用Main()方法

ActionTest.Test();

4.结果


就是这样。这篇关于C#内置泛型委托的动作委托的文章已经介绍到这里了

0

精彩评论

暂无评论...
验证码 换一张
取 消