簡體   English   中英

這個C#代碼使用概念叫做什么?它是如何工作的?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM