首页 > 代码库 > c#中的泛型委托(@WhiteTaken)
c#中的泛型委托(@WhiteTaken)
今天学习一下c#中的泛型委托。
1.一般的委托,delegate,可以又传入参数(<=32),声明的方法为 public delegate void SomethingDelegate(int a);
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace delegateSummary { 8 public delegate void GetIntDelegate(int a); //声明一个委托 9 public class getIntClass { 10 public static void SetDelegateString(int a,GetIntDelegate getIntDelegate) {//使用委托 11 getIntDelegate(a); 12 } 13 public void getInt1(int a) { //方法1 14 Console.WriteLine("getInt1方法调用,参数为:" + a); 15 } 16 public void getInt2(int a) { //方法2 17 Console.WriteLine("getInt2方法调用,参数为:" + a); 18 } 19 } 20 class Program { 21 static void Main(string[] args) { 22 getIntClass gc=new getIntClass(); 23 getIntClass.SetDelegateString(5, gc.getInt1); //方法1,2作为委托的参数 24 getIntClass.SetDelegateString(10, gc.getInt2); 25 Console.WriteLine("====================="); 26 GetIntDelegate getIntDelegate; 27 getIntDelegate = gc.getInt1; //将方法1,2绑定到委托 28 getIntDelegate += gc.getInt2; 29 getIntClass.SetDelegateString(100, getIntDelegate); 30 Console.Read(); 31 } 32 } 33 }
输出结果,注意两种方式的不同,第一种将方法作为委托的参数,第二种是将方法绑定到委托。
2.泛型委托之Action,最多传入16个参数,无返回值。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace delegateSummary { 8 class Program { 9 static void Main(string[] args) { 10 TestAction<string>(getString, "WhiteTaken"); //传入方法 11 TestAction<int>(getInt, 666); 12 TestAction<int, string>(getStringAndInt, 666, "WhiteTaken"); 13 Console.Read(); 14 } 15 public static void TestAction<T>(Action<T> action,T p1) { //Action传入一个参数测试 16 action(p1); 17 } 18 public static void TestAction<T, P>(Action<T, P> action, T p1, P p2) { //Action传入两个参数测试 19 action(p1,p2); 20 } 21 public static void getString(string a) { //实现int类型打印 22 Console.WriteLine("测试Action,传入string,并且传入的参数为:" +a); 23 } 24 25 public static void getInt(int a) { //实现String类型打印 26 Console.WriteLine("测试Action,传入int,并且传入的参数为:" + a); 27 } 28 29 public static void getStringAndInt(int a, string name) { //实现int+string类型打印 30 Console.WriteLine("测试Action,传入两参数,并且传入的参数为:" + a+":"+name); 31 } 32 } 33 }
测试结果:
3.泛型委托之Func,最多传入16个参数,有返回值。(写法与Action类似,只是多了返回值)
4.泛型委托之predicate(不是很常用),返回值为bool,用在Array和list中搜索元素。(没有用到过,等用到了再更新)
c#中的泛型委托(@WhiteTaken)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。