Это плохая практика - постоянно использовать Action и Func вместо создания соответствующих делегатов? - PullRequest
4 голосов
/ 14 сентября 2011

Много времени при создании в моей программе простых событий, на которые могут подписаться другие классы, вместо создания делегата и создания события из делегата. Я просто создаю событие с помощью Action или Func, чтобы избежать необходимости создавать делегат.

Есть ли минусы в этом?

Ответы [ 3 ]

8 голосов
/ 14 сентября 2011

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

Например:

   public delegate void ClearAllValuesDelegate(MyClass X);

   // ...

   ClearAllValuesDelegate myDelegate;

против:

   Action<MyClass> myDelegate;

В первом случае очевидно, что действие должно очистить все значения в ссылке (хотя, конечно, нет способа обеспечить это).Принимая во внимание, что Action<> просто говорит вам, что нужно, и больше ничего.Как я уже сказал, это просто логическое различие.

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

3 голосов
/ 14 сентября 2011

Основным отличием для меня является разница между:

enter image description here

И:

enter image description here

Очевидно, что есть принаименьшее некоторое значение в названии параметра.

1 голос
/ 14 сентября 2011

imho это вопрос предпочтений, для CLR это одно и то же

...