.NET Works: Generische EventArgs
EventArgs<T> - Generische EventArgs
Im .NET-Framework 2.0 gibt es - dank der eingeführten Generics - einen EventHandler<T>, der einem bei der Erstellung von korrekt typisierten Event-Signaturen viel Tipparbeit ersparen kann.
Bei vielen Event-Signaturen ist es weiterhin oft der Fall, dass man mit dem Event einen Wert - zum Beispiel den aktuellen Wert des Subscription-Targets - an den Subscriber mitliefern möchte. Diese besondere Anforderung ist vor allem bei Business-Objekten und spezifischen status-orientierten Klassen gegeben.
Statt nun für jede Signatur eine spezielle EventArgs-Klasse zu implementieren, lässt sich diese Anforderung kurz und knapp mit Generics lösen.
using System;
namespace ICF
{
[Serializable]
public class EventArgs<T> : EventArgs
{
private readonly T value;
public EventArgs(T value)
{
this.value = value;
}
public T Value
{
get
{
return value;
}
}
}
}
Anwendung
Die Anwendung von EventArgs<T> ist denkbar einfach. Als Beispiel soll ein Klassen-Fragment dienen, die bei einer Änderung eines Risiko-Multiplikators für Projektaufgaben einen Event mit dem neuen Risiko-Multiplikator wirft.
using System;
using ICF;
namespace ICF.Sample
{
public class ProjectTask
{
private int riskMultiplier;
public event EventHandler<EventArgs<int>> RiskMultiplierChanged;
public int RiskMultiplier
{
get
{
return this.riskMultiplier;
}
set
{
if (this.riskMultiplier != value)
{
this.riskMultiplier = value;
if (this.RiskMultiplierChanged != null)
{
this.RiskMultiplierChanged(this, new EventArgs<int>(this.riskMultiplier));
}
}
}
}
}
}
