我对使用和不使用Invoke感到困惑。
在以下示例中,我认为
没有区别int answer = b(10, 10);
和
int answer = b.Invoke(10, 10);
所以有人可以帮我这个吗? THX!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace TEST
{
public delegate int BinaryOp(int x, int y);
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main innvoked on thread {0}.", Thread.CurrentThread.ManagedThreadId);
BinaryOp b = new BinaryOp(add);
//int answer = b(10, 10);
int answer = b.Invoke(10, 10);
Console.WriteLine("Doing more work in Main");
Console.WriteLine("10 + 10 is {0}", answer);
Console.Read();
}
static int add(int x, int y)
{
Console.WriteLine("add innvoked on thread {0}.", Thread.CurrentThread.ManagedThreadId);
return x + y;
}
}
}
答案 0 :(得分:0)
基本上没有区别。
具体来说,因为Delegate
实际上不是函数而是函数的持有者,所以保存函数的类必须有某种方式来调用它。因此方法Invoke
。另一方面,当您将括号附加到Invoke
时,编译器足够聪明以自动调用Delegate
。请参阅https://jacksondunstan.com/articles/3283。