Estoy bastante segura de que es posible (al menos en Java lo es) y soy principiante de C #.

Entonces tengo una función que incluye una devolución de llamada (notifique a algún otro método que algún trabajo ha finalizado).

No quiero llamar a otra función porque estoy perdiendo un parámetro allí (y no puedo pasar parámetros en las funciones de devolución de llamada). ¿Cómo puedo hacer todo en la misma función?

Lo que estoy haciendo ahora:

public static Tween Play(Tween tweenToPlay) 
{
    return tweenToPlay.Play().OnComplete(RewindCallback);

}

private static void RewindCallback() 
{
    // Execute some code after Tween is completed
}

Lo que realmente quiero:

public static Tween Play(Tween tweenToPlay) 
{
    return tweenToPlay.Play().OnComplete(/*Create a function that will execute here*/);
}
c#
4
rootpanthera 17 oct. 2017 a las 20:29

3 respuestas

La mejor respuesta

¿Solo quieres un método anónimo?

public static Tween Play(Tween tweenToPlay) 
{
    return tweenToPlay.Play().OnComplete(() => 
    {
        //... your code
    });
}
12
Jonesopolis 17 oct. 2017 a las 17:32

¿Te refieres a una expresión lambda, como esta?

public static Tween Play(Tween tweenToPlay) 
{
    return tweenToPlay
        .Play()
        .OnComplete(() => {
            //  Do stuff
        });
}
14
15ee8f99-57ff-4f92-890c-b56153 17 oct. 2017 a las 17:31

Anónimo / lambdas son más cortos de escribir, pero dependiendo de la complejidad, es posible que desee utilizar una clase completa de la siguiente manera.

Cree una clase con un campo para esa variable y una función de devolución de llamada adecuada.

Cuando desee suscribirse a la devolución de llamada, cree una instancia de esa clase con ese campo establecido y establezca la devolución de llamada en la devolución de llamada en esa instancia.

Ejemplo:

class Temp
{
    public Tween Tween1;

    public void RewindCallback()
    {
        // Execute some code after Tween is completed
    }
}

Y uso:

Temp temp;
public Tween Play(Tween tweenToPlay)
{
    temp = new Temp { Tween1 = tweenToPlay };
    return tweenToPlay.Play().OnComplete(temp.RewindCallback);
}
3
ispiro 17 oct. 2017 a las 19:23