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.

¿Qué hace realmente esta suscripción de delegado?

Encontré este tipo de suscripción de eventos dentro de un proyecto y no puedo entender qué hace en realidad. Abajo tengo la implementación completa de la clase para probar el escenario y las líneas que plantean preguntas son _onScroll += _ => _onScroll3?.Invoke(); y _onScroll2 += () => _onScroll3?.Invoke();.
Después de probar el código, todo lo que puedo concluir es que _onScroll y _onScroll2 de alguna manera copian los suscriptores de _onScroll3, pero ¿por qué hay una llamada al método Invoke?

public class TestEvent
{
    private event Action<int> _onScroll;
    private event Action _onScroll2;
    private event Action _onScroll3;

<pre><code>public void Subscribe()
{
    _onScroll3 += HandleOnScroll;
    _onScroll3 += HandleOnScroll2;
}

public void DoWork()
{
    _onScroll += _ => _onScroll3?.Invoke();
    _onScroll?.Invoke(0);
}

public void DoWork2()
{
    _onScroll2 += () => _onScroll3?.Invoke();
    _onScroll2?.Invoke();
}

public void DoWork3()
{
    _onScroll3?.Invoke();
}

private void HandleOnScroll()
{
    Console.WriteLine(nameof(HandleOnScroll));
}

private void HandleOnScroll2()
{
    Console.WriteLine(nameof(HandleOnScroll2));
}
</code></pre>

}
Tags:  ,

Answer

  1. Avatar for davy.ai

    El fragmento de código proporcionado contiene varios eventos _onScroll, _onScroll2 y _onScroll3, y tres métodos DoWork, DoWork2 y DoWork3. El método Subscribe se utiliza para suscribir métodos HandleOnScroll y HandleOnScroll2 al evento _onScroll3.

    El método DoWork agrega una expresión lambda al evento _onScroll que invoca el evento _onScroll3 con un parámetro entero especificado. El método Invoke se utiliza para generar el evento y llamar a todos los manejadores de eventos suscritos al _onScroll.

    El método DoWork2 agrega una expresión lambda al evento _onScroll2 que invoca el evento _onScroll3 sin ningún parámetro. De nuevo, el método Invoke se utiliza para generar el evento y llamar a todos los manejadores de eventos suscritos al _onScroll2.

    El método DoWork3 invoca directamente el evento _onScroll3 sin agregar ningún manejador a este. Este método se puede utilizar para probar si algún manejador está suscrito al evento _onScroll3.

    En general, el código crea eventos a los que otros métodos pueden suscribirse e invoca estos eventos con parámetros especificados. El propósito de este fragmento de código puede ser implementar un patrón de publicación-suscripción o notificar a otros métodos sobre la ocurrencia de ciertos eventos.

Comments are closed.