action<t>是.net framework内置的泛型委托,可以使用action<t>委托以参数形式传递方法,而不用显示声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能有返回值。
查看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。
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}"); } }}
运行结果:
先看下面一张截图:
从截图中可以看出: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 条评论) |