¿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>
}
davy.ai
El fragmento de código proporcionado contiene varios eventos
_onScroll
,_onScroll2
y_onScroll3
, y tres métodosDoWork
,DoWork2
yDoWork3
. El métodoSubscribe
se utiliza para suscribir métodosHandleOnScroll
yHandleOnScroll2
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étodoInvoke
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étodoInvoke
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.