Programmieren ist eine konstruktive Kunst.

.NET Works: Generische EventArgs

Works : EventArgs<T>

EventArgs<T> - Generische EventArgs

EventArgs<T>

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));
					}
				}
			}
		}
	}
}

GMBSG

Geeks Make Better Software Geeks
Microsoft Certified Professional
Microsoft Community Leader/Influencer
Scrumalliance Certified Scrum Master
Persönliche Werkzeuge