c#中的泛型委托详解

2019-12-30 15:53:23于海丽

今天学习一下c#中的泛型委托。

1.一般的委托,delegate,可以又传入参数(<=32),声明的方法为  public delegate void SomethingDelegate(int a);


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace delegateSummary {
 public delegate void GetIntDelegate(int a); //声明一个委托
 public class getIntClass { 
  public static void SetDelegateString(int a,GetIntDelegate getIntDelegate) {//使用委托
   getIntDelegate(a);
  }
  public void getInt1(int a) { //方法1
   Console.WriteLine("getInt1方法调用,参数为:" + a);
  }
  public void getInt2(int a) { //方法2
   Console.WriteLine("getInt2方法调用,参数为:" + a);
  }
 }
 class Program {
  static void Main(string[] args) {
   getIntClass gc=new getIntClass();
   getIntClass.SetDelegateString(5, gc.getInt1);   //方法1,2作为委托的参数
   getIntClass.SetDelegateString(10, gc.getInt2);  
   Console.WriteLine("=====================");
   GetIntDelegate getIntDelegate;
   getIntDelegate = gc.getInt1;        //将方法1,2绑定到委托
   getIntDelegate += gc.getInt2;
   getIntClass.SetDelegateString(100, getIntDelegate); 
   Console.Read();
  } 
 }
}

输出结果,注意两种方式的不同,第一种将方法作为委托的参数,第二种是将方法绑定到委托。

c#,泛型委托

2.泛型委托之Action,最多传入16个参数,无返回值。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace delegateSummary {
 class Program {
  static void Main(string[] args) {
   TestAction<string>(getString, "WhiteTaken");  //传入方法
   TestAction<int>(getInt, 666);
   TestAction<int, string>(getStringAndInt, 666, "WhiteTaken");
   Console.Read();   
  }
  public static void TestAction<T>(Action<T> action,T p1) {        //Action传入一个参数测试
   action(p1);
  }
  public static void TestAction<T, P>(Action<T, P> action, T p1, P p2) { //Action传入两个参数测试
   action(p1,p2);
  }
  public static void getString(string a) {        //实现int类型打印
   Console.WriteLine("测试Action,传入string,并且传入的参数为:" +a);
  }
  public static void getInt(int a) {          //实现String类型打印
   Console.WriteLine("测试Action,传入int,并且传入的参数为:" + a);
  }
  public static void getStringAndInt(int a, string name) {      //实现int+string类型打印
   Console.WriteLine("测试Action,传入两参数,并且传入的参数为:" + a+":"+name);
  }
 }
}

测试结果: