首页 > 作文

C#内置泛型委托之Action委托

更新时间:2023-04-06 03:37:35 阅读: 评论:0

1、什么是action泛型委托

action<t>是.net framework内置的泛型委托,可以使用action<t>委托以参数形式传递方法,而不用显示声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能有返回值。

2、action委托定义

查看action的定义:

using system.runtime.compilerrvices;namespace system{    //    // 摘要:    //     封装一个方法,该方法不具有参数且不返回值。    [typeforwardedfrom("system.core, version=3.5.0.0, culture=neutral, publickeytoken=b77a5c561934e089")]    public delegate void action();}

你会发现,action其实就是没有返回值的delegate。

3、示例

action委托至少0个参数,至多16个参数,无返回值。

action 表示无参,无返回值的委托。

action<int,string> 表示有传入参数int,美在我身边作文string无返回值的委托。

action<int,string,学生会女生部面试问题bool> 表示有传入参数int,st女牙医ring,bool无返回值的委托。

action<int,int,int,int> 表示有传入4个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 = () => { console.writeline("这里是匿名委托"); };            action3();            console.writeline("----------------------------");            // 有参数无返回值的委托            action<int> action4 = new action<int>(actionwithpara);            action4(23);            console.writeline("----------------------------");            // 使用delegate            action<int> action5 = delegate (int i) { console.writeline($"这里是使用delegate的委托,参数值是:{i}"); };            action5(45);            console.writeline("----------------------------");            // 使用匿名委托            action<string> action6 = (string s) => { console.writeline($"这里是使用匿名委托,参数值是:{s}"); };            action6("345");            console.writeline("----------------------------");            // 多个参数无返回值的委托            action<int, string> action7 = new action<int, string>(actionwithmulitpara);            action7(7, "abc");            console.writeline("----------------------------");            // 使用delegate            action<int, int, string> action8 = delegate (int i1, int i2, string s)             {                console.writeline($"这里是三个参数的action委托,参数1的值是:{i1},参数2的值是:{i2},参数3的值是:{s}");            };            action8(12, 34, "abc");            console.writeline("----------------------------");            action<int,int,string, string> action9 = (int i1,int i2, string s1,string s2) =>             {                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()方法的参数是一个参数类型是t的无返回值的action委托,下面的示例中利用action委托作为参数传递给foreach()方法。

1、定义student实体类

using system;using system.collections.generic;using system.linq;using system.text;usin中山大学地址g system.threading.tasks;namespace actiondemo{    public class student    {        public int id { get; t; }        public string name { get; t; }        public int age { get; t; }        public int x { get; t; }    }}

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()        {            list<student> list = new list<student>()            {              new student(){id=1,name="张三",age=19,x=1},        因素      new student(){id=2,name="李四",age=20,x=2},              new student(){id=3,name="王五",age=23,x=1},              new student(){id=4,name="赵六",age=18,x=1}            };            // action<student>委托作为参数传递给foreach()方法            list.foreach(student =>            {                console.writeline($"姓名:{student.name},年龄:{student.age}");            });        }    }}

3、在main()方法中调用

actiontest.test();

4、结果

到此这篇关于c#内置泛型委托之action委托的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。

本文发布于:2023-04-06 03:37:33,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/960cd9c4256bcad9d2e3aedbca9c2466.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:C#内置泛型委托之Action委托.doc

本文 PDF 下载地址:C#内置泛型委托之Action委托.pdf

标签:参数   返回值   方法   示例
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图