Почему я не могу объявить делегата на функциональном уровне? - PullRequest
4 голосов
/ 18 июня 2010

Извините, если этот вопрос слишком прост или легок.

Я только начал изучать делегатов с использованием C #. Когда я пытался объявить один внутри функции, я получил ошибки времени разработки, но когда я объявляю тот же делегат на уровне класса, он работает нормально. Почему?

Если имеет значение, это код: delegate void Test();

Ответы [ 2 ]

8 голосов
/ 18 июня 2010

AFAIK, объявление такого делегата (в C #, который я предполагаю, что вы используете язык) объявляет новый тип. Так же, как вы не можете объявлять классы, структуры или интерфейсы в методе, вы не можете объявлять этот тип.

Редактировать: Если вы только изучаете делегатов, и язык действительно c #, подумайте об использовании шаблонного делегата Func! Это избавит вас от повсюду деклараций.

http://msdn.microsoft.com/en-us/library/bb549151.aspx

0 голосов
/ 18 июня 2010

Определение делегата внутри функции будет по существу объявлением функции внутри функции. Назначение делегатов - передавать их между функциями / методами, поэтому они полезны только тогда, когда они объявлены на уровне класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...