.NET: & синтаксис имени функции - PullRequest
1 голос
/ 01 января 2012

Что означает синтаксис &function_name?

Например, как используется в делегате

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

как используется с обработкой событий с BackgroundWorker объектом.

Прототип делегата

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

Предположительно, это означает, что &Form1::DoWorkEvent возвращает DoWorkEventArgs объект? Но это не имеет особого смысла.

Ответы [ 2 ]

3 голосов
/ 01 января 2012

System::ComponentModel::DoWorkEventHandler(this, &Form1::DoWorkEvent) создает делегата.Синтаксис для создания делегата: gcnew delegatename(thisObject, functionPointer).Он создает делегат, который вызывает functionPointer с this, установленным на thisObject.

К , вызывает делегат, вы вызываете его с соответствующими параметрами.delegateVariable->Invoke(parameter1, parameter2, etc).В случае DoWorkEventHandler, parameter1 - это sender, а parameter2 - это e.

Вы путаете две разные вещи: создание и вызов.Строка DoWorkEventHandler(this, &Form1::DoWorkEvent) создает делегата.Двумя параметрами являются thisObject и functionPointer, а не sender и e.

. Это должно было быть включено в любую книгу / ресурс, который вы использовали, чтобы узнать о делегатах в первую очередь.Например, эта статья говорит

Создание экземпляра делегата включает вызов конструктора.Если вы инкапсулируете статическую функцию, вы передаете один аргумент - указатель на эту функцию-член.Для функции экземпляра вы должны передать два аргумента: дескриптор этого экземпляра, а также указатель на функцию-член экземпляра.

0 голосов
/ 01 января 2012

Мой C ++ довольно ржавый, но я не думаю, что вы вообще смотрите на .NET, а на стандартный указатель функции-члена C ++.

...