Пишите делегаты, не портя код

1

Я пишу делегатов так.

  delegate void MyMethod(string arg1, string arg2);
  MyMethod mm;

Я не знаю, зачем ему нужно две строки, чтобы объявить один делегат. Если в моем классе 20 делегатов, мне нужно написать 40 строк кода. Может ли кто-нибудь сказать мне способ написать это в одной строке кода? Заранее спасибо.

  • 3
    Если вы используете .NET Framework 3.5 или новее, вы можете использовать делегаты Func <T> и Avtion <T> вместо того, чтобы каждый раз объявлять новый тип делегата.
  • 0
    Есть ли разница в производительности между Func и Delegate?
Показать ещё 1 комментарий
Теги:
delegates

1 ответ

10
Лучший ответ

Вы заявляете здесь две разные вещи:

  • Первая строка объявляет тип делегата, называемый MyMethod
  • Вторая строка объявляет поле этого типа делегата

Важно понимать разницу, потому что тогда вы можете работать, когда действительно хотите объявить новый тип делегата, и когда вы просто хотите объявить поле существующего типа делегата. Если ваш класс имеет 20 полей делегатов, вы почти наверняка не хотите объявлять новый тип для каждого из них. Если у них есть одна и та же подпись, вы можете использовать один тип... или лучше, просто используйте один из типов фреймворков, например Action<...> или Func<...>.

Action<string, string> mm;

(Есть Action делегатов void типов возврата, и Func делегаты non- void типов возврата, с разным числом параметров, все выражается в общих чертах. Посмотрите на MSDN для получения более подробной информации.)

  • 1
    А как насчет таких типов, как Tuples? Мне сказали, что обычно они используются только во время создания прототипов, но их нужно поместить в класс перед началом производства.
  • 0
    Есть ли разница в производительности между делегатом и Func?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню