Что означает это объявление в C # .net? - PullRequest
2 голосов
/ 18 августа 2011

У меня есть следующее объявление в .NET.Я хочу знать, что именно означает это объявление (вторая строка), особенно DoConsoleCancelEvent

delegate void InternalCancelHandler;

static readonly InternalCancelHandler cancel_handler = 
    new InternalCancelHandler (DoConsoleCancelEvent);

DoConsoleCancelEvent объявлено как:

internal static void DoConsoleCancelEvent{...}

Что такое терминиспользуется в .NET?Это отражение .NET?

Ответы [ 3 ]

7 голосов
/ 18 августа 2011

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 означает, чтополе связано с Type, а не с конкретным экземпляром Type

readonly означает, что поле может быть назначено только во время построения Type

0 голосов
/ 18 августа 2011

InternalCancelHandler является delegate.

Согласно Mono commit , это то, что говорится о DoConsoleCancelEvent:

Добавляет вызов функции Win32 SetConsoleCtrlHandler для Windows, который добавляетоболочка DoWindowsConsoleCancelEvent для DoConsoleCancelEvent для обработчика Ctrl-C при добавлении обработчика событий и удаляет обработчик после удаления всех обработчиков событий.

0 голосов
/ 18 августа 2011

Я считаю, что вы ищете термин Делегат .

В этом случае InternalCancelHandler является делегатом. Первая строка кода создает делегата, который указывает на ваш метод DoConsoleCancelEvent. Затем делегат будет использоваться для вызова вашего метода в более поздний момент времени.

...