[英]What is this C# code usage concept called? And how does it work?
我在這里看一個關於RegisterWaitForSingleObject
的MSDN,並在示例中找到了這個用法 -
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)
視為方法,因此變量可以在調用本身中使用。
這個概念叫什么?
它是如何工作的?
這個概念叫什么?
它是如何工作的?
它被稱為Lambda表達式 。 編譯器獲取表達式並將其轉換為命名方法,同時為您省去實際定義每次匹配委托簽名的命名方法的麻煩。
使用TryRoslyn ,這是您的委托編譯到的(在新的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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.