es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Acción con parámetros pre configurados

Quiero registrar algunas acciones / delegados / eventos o algo similar con parámetros predefinidos (sin parámetros en la llamada).
Ejemplo:

public Action acciones;

public void Main()
{
    acciones += Agregar(12);
    acciones += Mostrar("algo");
    acciones += Calcular(2, 4);
    acciones?.Invoke();
}

public void Agregar(int k) { }
public void Mostrar(string s) { }
public void Calcular(int k, int c) { }

Otra opción sería algo como esto:

public void Main()
{
    acciones += Agregar(12);
    acciones += Agregar(1);
    acciones += Agregar(4);
    acciones?.Invoke();
}

¿Es posible hacer esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible registrar acciones/delegados/eventos con parámetros predefinidos. Una forma de lograr esto es utilizando expresiones lambda. Las expresiones lambda se pueden utilizar para crear métodos anónimos que pueden capturar los parámetros requeridos y ser registrados con la acción/delegado/evento.

    Ejemplo:

    public Action acciones;
    
    public void Principal()
    {
        acciones += () => Agregar(12);
        acciones += () => Mostrar("algo");
        acciones += () => Calcular(2, 4);
        acciones?.Invoke();
    }
    
    public void Agregar(int k) { }
    public void Mostrar(string s) { }
    public void Calcular(int k, int c) { }
    

    En el ejemplo anterior, se utilizan expresiones lambda para crear métodos anónimos que capturan los parámetros requeridos y luego llaman a los métodos correspondientes cuando son invocados.

    De manera similar, en el segundo ejemplo, se pueden utilizar expresiones lambda para registrar múltiples acciones con parámetros predefinidos.

    public Action acciones;
    
    public void Principal()
    {
        acciones += () => Agregar(12);
        acciones += () => Agregar(1);
        acciones += () => Agregar(4);
        acciones?.Invoke();
    }
    
    public void Agregar(int k) { }
    

    En este caso, cada expresión lambda captura un valor diferente de k y registra una acción que llama al método Agregar con el valor capturado.

Comments are closed.