2011-08-18 62 views
2

我在.NET中有以下聲明。我想知道究竟該聲明意味着什麼(第二行),尤其是DoConsoleCancelEventC#.net中的這個聲明是什麼意思?

delegate void InternalCancelHandler; 

static readonly InternalCancelHandler cancel_handler = 
    new InternalCancelHandler (DoConsoleCancelEvent); 

DoConsoleCancelEvent聲明爲:

internal static void DoConsoleCancelEvent{...} 

什麼是.NET中使用的術語?它是.NET反射?

回答

7

InternalCancelHandler是一個delegate,這是持有對特定方法的引用的C#方式。第一行定義的委託指具有void回報的方法,以及不帶參數這個定義(因爲沒有參數列表。):

delegate int InternalCancelHandler(bool boolParam); 

定義一個委託,以引用的方法,其返回一個int並接受一個參數bool

下一行是該委託類型的靜態只讀字段的聲明,該字段被初始化爲引用DoConsoleCancelEvent方法的新實例。

該宣言,你現在可以調用DoConsoleCancelEvent通過調用委託:

public static void CallDelegate() 
{ 
    // This line will actually call DoConsoleCancelEvent 
    MyType.cancel_handler(); 
} 

注意,Handler在委託類型的結束表明,它是一個事件處理程序,這意味着它的更有可能的是,你會想用它來訂閱事件:

public static void EventSub() 
{ 
    // This line makes it so that cancel_handler is called when 
    // SomeEvent is fired. Since cancel_handler actually refers 
    // to DoConsoleCancelEvent, it is *that* method that will 
    // actually be run 
    SomeType.SomeEvent += cancel_handler; 
} 

static意味着該領域與相關10,而不是的Type

readonly特定實例意味着字段只能建設Type

+1

嗯,它可能是一個代表...它也可以是一個類,其構造函數接受一個委託 –

+0

感謝您的答案,我剛剛編輯了更多的細節問題,以避免誤解。 –

+0

這麼棒的答案。很詳細。 –

0

我相信你正在尋找的術語Delegate期間被分配。

在這種情況下,InternalCancelHandler是委託人。第一行代碼創建一個指向您的DoConsoleCancelEvent方法的委託。然後,代表將在以後用於調用您的方法。

0

InternalCancelHandlerdelegate

根據Mono commit,這是它說,關於DoConsoleCancelEvent

添加一個調用的Windows, Win32函數SetConsoleCtrlHandler它增加了DoWindowsConsoleCancelEvent包裝的 DoConsoleCancelEvent爲Ctrl-C處理程序時添加事件處理程序 ,並在刪除所有事件處理程序後刪除處理程序。