我正在查看有关 RegisterWaitForSingleObject
的 MSDN HERE并在示例中找到了这种用法 -
ti.Handle = ThreadPool.RegisterWaitForSingleObject(
ev,
new WaitOrTimerCallback(WaitProc),
ti,
1000,
false
);
WaitProc
是一个方法 -
public static void WaitProc(object state, bool timedOut)
{
//Code
}
我还找到了一些示例,其中将 WaitProc
方法替换为与此类似的方法 -
ti.Handle = ThreadPool.RegisterWaitForSingleObject(
ev,
(state, timedOut) => {
//code blah blah
//manipulate state
//manipulate timedOut
}
ti,
1000,
false
);
这里我假设方法 RegisterWaitForSingleObject
需要一个 WaitOrTimerCallback
方法,并且编译器理解这一点并将 (state, timedOut)
视为方法,因此变量可以在调用本身中使用。
这个概念叫什么?
它是如何工作的?
最佳答案
What is this concept called?
And how does it work?
它被称为 Lambda Expression .编译器获取表达式并将其转换为命名方法,同时为您省去了每次实际定义与委托(delegate)签名匹配的命名方法的麻烦。
使用 TryRoslyn ,这就是您的委托(delegate)编译成的内容(在新的 Roslyn 编译器上):
private sealed class <>c
{
public static readonly C.<>c <>9;
public static WaitOrTimerCallback <>9__0_0;
static <>c()
{
// Note: this type is marked as 'beforefieldinit'.
C.<>c.<>9 = new C.<>c();
}
internal void <M>b__0_0(object state, bool timedOut)
{
}
}
public void M()
{
Mutex mutex = new Mutex();
WaitHandle arg_2E_0 = mutex;
WaitOrTimerCallback arg_2E_1;
if (arg_2E_1 = C.<>c.<>9__0_0 == null)
{
arg_2E_1 = C.<>c.<>9__0_0 = new WaitOrTimerCallback(C.<>c.<>9.<M>b__0_0);
}
RegisteredWaitHandle registeredWaitHandle =
ThreadPool.RegisterWaitForSingleObject(arg_2E_0, arg_2E_1, null, 1000, false);
}
关于c# - 这个 C# 代码使用概念叫什么?它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31681148/