我不会是唯一一个厌倦了定义和命名委托(delegate)的人,只需一次调用就需要委托(delegate)。例如,我想以可能来自其他线程的形式调用 .Refresh(),因此我编写了以下代码:
private void RefreshForm()
{
if (InvokeRequired)
Invoke(new InvokeDelegate(Refresh));
else
Refresh();
}
我什至不确定我必须这样做,我只是读了足够多的书,担心它在以后的某个阶段不起作用。
InvokeDelegate 实际上是在另一个文件中声明的,但是我真的需要一个专门用于此目的的整个委托(delegate)吗?根本就没有通用委托(delegate)吗?
我的意思是,例如,有一个 Pen 类,但也有 Pens。pen-of-choice 所以您不必重新制作整个东西。这不一样,但我希望你明白我的意思。
最佳答案
是的。在 .NET 3.5 中,您可以使用 Func和 Action委托(delegate)们。 Func 委托(delegate)返回一个值,而 Action 委托(delegate)返回 void。类型名称如下所示:
System.Func<TReturn> // (no arg, with return value)
System.Func<T, TReturn> // (1 arg, with return value)
System.Func<T1, T2, TReturn> // (2 arg, with return value)
System.Func<T1, T2, T3, TReturn> // (3 arg, with return value)
System.Func<T1, T2, T3, T4, TReturn> // (4 arg, with return value)
System.Action // (no arg, no return value)
System.Action<T> // (1 arg, no return value)
System.Action<T1, T2> // (2 arg, no return value)
System.Action<T1, T2, T3> // (3 arg, no return value)
System.Action<T1, T2, T3, T4> // (4 arg, no return value)
我不知道为什么他们每个都停在 4 个参数,但这对我来说已经足够了。
关于c# - C# 中的匿名委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/978063/