2012-01-01 25 views
1

語法&function_name是什麼意思?.NET:&function_name語法

例如,如在委託

System::ComponentModel::DoWorkEventHandler(this, &Form1::DoWorkEvent) 

用作與具有BackgroundWorker對象的事件處理使用。

委託原型是

public delegate void DoWorkEventHandler(Object^ sender, DoWorkEventArgs^ e) 

據推測,這意味着&Form1::DoWorkEvent返回DoWorkEventArgs對象?但這沒有多大意義。

+0

如果清楚地說明了C++/CLI特有的語法,爲什麼要標記'c#'? – 2012-01-01 07:20:38

+0

這個概念與C#中的概念相似(至少快速一下),所以我想我會標記它以獲得C#程序員的輸入。如果概念不同,我很抱歉。 – JonaGik 2012-01-01 07:40:39

+0

你在問具體的語法,但不是基本的概念。而語法*是*不同的 – jalf 2012-01-01 14:30:38

回答

3

System::ComponentModel::DoWorkEventHandler(this, &Form1::DoWorkEvent)創建委託人。創建委託的語法是gcnew delegatename(thisObject, functionPointer)。它會創建一個代表,其呼叫functionPointerthis設置爲thisObject

若要調用委託,您可以使用適當的參數調用它。 delegateVariable->Invoke(parameter1, parameter2, etc)。在DoWorkEventHandler的情況下,parameter1senderparameter2e

你混淆了兩個不同的東西,即創建和調用。行DoWorkEventHandler(this, &Form1::DoWorkEvent)創建一個委託。這兩個參數是thisObjectfunctionPointer,而不是sendere

這應該已經涵蓋了任何書籍/資源,你曾經習慣了代表首先了解代表。例如,this article表示

創建委託實例涉及調用構造函數。如果 封裝了一個靜態函數,則會傳入一個參數,一個指向該成員函數的指針 。對於實例函數,您必須在兩個參數中傳遞 :該實例的句柄以及實例成員函數的指針 。

0

我的C++很生疏,但我不認爲你在看.NET,而是一個標準的C++成員函數指針。