Ключевое слово delegate предназначено для компилятора, чтобы сделать для вас магию. Когда вы объявляете нового делегата с пользовательской подписью,
- компилятор создает новый тип для вас, полученный из MulticastDelegate (который, в свою очередь, происходит от делегата).
- компилятор добавляет метод Invoke с пользовательской подписи
- так же компилятор добавляет BeginInvoke и методы EndInvoke для этого нового типа
Итак, теперь, когда вы звоните delObject(args)
- компилятор транслирует, что delObject.Invoke(args)
Основной класс делегата предоставляет некоторые функциональные возможности, такие как
- CreateDelegate (для получения dele gate wrapping static/instance method)
- DynamicInvoke (для вызова делегата со списком аргументов - поздняя привязка)
- Объединение и удаление (для делегирования цепочки) объединение нескольких делегатов, например. несколько делегатов обработчика событий для события)
Компилятор C# запрещает вам извлекать из делегата эксплицитно в ваш код .. вам нужно использовать ключевое слово delegate.
Хорошая выборка из MSDN;) – Xian
http://msdn.microsoft.com/en-us/library/system.delegate.aspx – Xian