Classe EventArgs genérica

Às vezes, você deseja um manipulador de eventos simples em C # que passará um valor único, por exemplo, uma string. O tipo EventHandler <T> padrão espera que o tipo T genérico herde EventArgs, o que requer a criação de uma nova classe que herde EventArgs. Para passar uma string simples ou um número, isso é simplesmente código clichê demais.

Mas podemos criar uma classe EventArgs genérica, algo que está faltando no FCL e que envolverá nossa variável, satisfazendo assim EventHandler <T>.

public class EventArgs<T> : EventArgs
{
public T Value { get; private set; }

public EventArgs(T val)
{
Value = val;
}
}

Você declara seu evento com a seguinte sintaxe:

public event EventHandler<EventArgs<string>> StringReceivedEvent;

O seguinte snippet demonstra como usá-lo:

public void OnStringReceived()
{
if (StringReceivedEvent != null)
StringReceivedEvent(this, new EventArgs<string>(somestring));
}

// client code
StringReceivedEvent += (o, e) => Console.WriteLine(e.Value);