C# 如何使用约束';代表';
C现在允许泛型中的委托约束。当我试图学习新功能时,我没有一个实用的方法来使用它。由于其他人多年来一直要求使用此功能,我显然没有抓住要点C# 如何使用约束';代表';,c#,C#,C现在允许泛型中的委托约束。当我试图学习新功能时,我没有一个实用的方法来使用它。由于其他人多年来一直要求使用此功能,我显然没有抓住要点 public class Test<TDelegate> where TDelegate : Delegate { readonly TDelegate fd; // no way to call this public event TD Evt; // not even legal } 公共类测试,其中TDelegate:Del
public class Test<TDelegate> where TDelegate : Delegate
{
readonly TDelegate fd; // no way to call this
public event TD Evt; // not even legal
}
公共类测试,其中TDelegate:Delegate
{
只读TDelegate fd;//无法调用此
公共事件TD Evt;//甚至不合法
}
类如何使用作为委托的泛型参数执行有用的操作?您需要做的就是:
public static void Foo<T>(T t) where T : System.Delegate
{
t.DynamicInvoke();
}
publicstaticvoidfoo(T)其中T:System.Delegate
{
t、 DynamicInvoke();
}
出于某种原因,普通的
Invoke()
不是一个可以使用的有效方法 使用委托最明显的方法是。调用它。(而event
也只是围绕其他操作的语法糖衣,比如.Combine
),为了它的价值。@DavidG:问题是现在该怎么做,在最新版本的C#中,您可以将类型约束到委托。事实上,它被描述了,还有使用的演示。这就把问题变成了“你能给我解释一下这些文档吗?”@Jeroemostert呃,是的,我应该正确地阅读这个问题!“出于某种原因”。我就是这么说的,是的。@AustinWBryan Ed Plunkett讽刺可能是因为有一个非常具体的原因:Invoke
是强类型的,并且具有委托的确切参数数(以及确切的返回类型)。显然,这是基于委托T
(在编译时未知)而改变的DynamicInvoke
对委托一无所知,并且是完全通用的(它作为参数有一个object[]
,作为返回类型有一个object
),实际上,您需要做的就是查看它没有Invoke
方法。