El código de ejemplo del mundo real que se ha solicitado repetidamente, ya ha sido proporcionado en una respuesta anterior por el usuario "Console.WriteLine".
En cuanto a por qué se ha proporcionado, por lo que he entendido, Action es una forma de ahorrar para seguir definiendo nuevos delegados. Dado que es un delegado predefinido de tipos de firma particulares, se ahorra la molestia de crear diferentes delegados para cada fin previsto. Simplemente use el delegado de Acción predefinido para señalar sus métodos y ejecutarlos. Lo mismo es el caso con los delegados de Func.
Más de una conveniencia realmente, en lugar de una nueva funcionalidad real. Ayuda a mantener su código corto y comprensible, con menos problemas.
En cuanto a sus preguntas puntuales a gota,
- ¿Cuáles son las diferencias entre ellas
No hay diferencia. Action es un delegado predefinido, pensado para ahorrarte la molestia de definir repetidamente nuevos delegados.
- Cuándo utilizar un delegado o acción
Típicamente, un delegado (y acción) se utiliza en los lugares donde se necesita tener una funcionalidad basada en tablas. es decir, tal vez un diccionario de métodos correspondiente a algún requisito particular. Tenga en cuenta que el uso de Acción hace que sea fácil cambiar el método final llamado, para apuntar a algún otro método de forma dinámica (¿tal vez en función de algunas configuraciones seleccionadas por el usuario?)
class Program
{
static void Main()
{
Dictionary<string, Action> dict = new Dictionary<string, Action>();
dict["loadFile"] = new Action(LoadFile);
dict["saveFile"] = new Action(SaveFile);
dict["loadFile"].Invoke();
dict["saveFile"].Invoke();
}
static void SaveFile()
{
Console.WriteLine("File saved!");
}
static void LoadFile()
{
Console.WriteLine("Loading File...");
}
}
Otro uso típico es para los métodos de devolución de llamada. Ejemplo sería cuando usa una clase BubbleSort, pasando el método de comparación como un delegado a la clase, que sería utilizado por la clase BubbleSort para permitir que su código defina la lógica de comparación, mientras se ocupa de todo lo demás. Esto también se puede usar a partir de los hilos que ha iniciado, y el hilo llama al delegado cuando se deben informar algunas acciones intermedias a su código.
Puede consultar esta publicación SO para ver un gran ejemplo de lo anterior. https://stackoverflow.com/a/3794229/1336068
- Cuando no utilizar un delegado o acción
La única razón que se me ocurre no usarlos cuando la situación lo exige, es decir, si su el delegado va a ser llamado millones de veces en una corta duración. Hay una ligera sobrecarga involucrada, y si esto está causando un retraso en la aplicación, entonces puede que tenga que encontrar una mejor manera de resolver esto usando referencia directa a sus funciones, en lugar de a través de un delegado.
- Cuando pueden ser una más de matar
cuando se utilizan a título gratuito y sin ninguna necesidad real. De lo contrario, en la mayoría de las situaciones, pueden ser una forma elegante de resolver los escenarios anteriores.
Además, lea este SO respuesta para ver las diferencias entre los métodos normales, los delegados a obtener una mejor comprensión de dónde utilizar los delegados/acción/func https://stackoverflow.com/a/17380580/1336068
Una acción es un delegado cuya firma no tiene parámetros y tiene sin valor de retorno – Siege
Puedo buscar y leer el MSDN en este remolque. Pero lo que estoy buscando son simples ejemplos del mundo real para delegate & Action – HatSoft
No puede usar 'Action' sin usar un delegado al mismo tiempo, ya que' Action' es un tipo de delegado específico. – CodesInChaos