在编写委托相关代码,尤其是泛型委托相关代码的时候,经常会遇到下面这种问题:
定义一个委托类型:
public delegate void TestDelegate<T>(T arg);
定义一个测试用的类,及方法:
public class TestClass
{
public void TestFunc4Delegate(int arg){}
public void TestFunc1(Delegate dele){}
public void TestFunc2<T>(TestDelegate<T> dele){}
}
测试用的代码:
1. TestClass tc = new TestClass();
2. tc.TestFunc1(tc.TestFunc4Delegate);
3. tc.TestFunc2(tc.TestFunc4Delegate);
然后会发现,上面的测试用代码有编译错误,其中第二行的编译错误是“无法从方法组转换为System.Delegate”,第三行的编译错误是“无法从用法中推导出TestClass.TestFunc2<T>(TestDelegate<T>)的类型实参”。
以上报错的核心问题就在“方法组”上。“方法组”是一个编译器概念,由于C#支持方法重载,所以名字相同的方法可能会有多种重载实现方式,这所有的名称相同的重载方法合在一起就成为