我需要定义一个具有通用List返回类型的委托,最好的方法是什么?
delegate List<T> TestDelegate(string arg1, string arg2);
然后我想这样做
TestDelegate td = new TestDelegate(Method1);
或者
TestDelegate td = new TestDelegate(Method2);
Method1和Method2的签名:
List<MyClass1> Method1(string arg1, string arg2)
List<MyClass2> Method2(string arg1, string arg2)
有没有办法实现这个目标?
答案 0 :(得分:1)
您可以定义抽象类:
public abstract class MyClass{
public String GenericProperty{get;set;}
}
和你的具体课程:
public MyClass1 : MyClass {
public String SpecificProperty{get; set;}
}
public MyClass2 : MyClass {
public String OtherSpecificProperty{get; set;}
}
然后代表成为:
delegate List<MyClass> TestDelegate(string arg1, string arg2);
List<MyClass> Method1(string arg1, string arg2)
List<MyClass> Method2(string arg1, string arg2)
List<MyClass> = new TestDelegate(Method1);
List<MyClass> = new TestDelegate(Method2);
答案 1 :(得分:0)
您可以使委托本身具有通用性:
delegate List<T> TestDelegate<T>(string arg1, string arg2);
var td1 = new TestDelegate<MyClass1>(Method1);
var td2 = new TestDelegate<MyClass2>(Method2);
请注意委托声明中的其他<T>
。