Не совсем, единственный недостаток, о котором я могу подумать, это то, что если у вас есть логическое намерение (помимо ожидаемых параметров и возвращаемых значений), что вы хотите, чтобы пользователь удовлетворил это, может быть потеряно при использовании общих делегатов.
Например:
public delegate void ClearAllValuesDelegate(MyClass X);
// ...
ClearAllValuesDelegate myDelegate;
против:
Action<MyClass> myDelegate;
В первом случае очевидно, что действие должно очистить все значения в ссылке (хотя, конечно, нет способа обеспечить это).Принимая во внимание, что Action<>
просто говорит вам, что нужно, и больше ничего.Как я уже сказал, это просто логическое различие.
Но на самом деле нет большого недостатка, о котором я знаю.В большинстве случаев, когда мы используем Func<>
и Action<>
, мы просто просим вызывающую сторону указать нам цель, которая удовлетворяет только входам / выходам.