Revision: 13990
Updated Code
at May 14, 2009 17:31 by pckujawa
Updated Code
/// <summary> /// Generic EventArgs class to hold event data. /// </summary> /// <example> /// To create an event that sends a string (such as an error message): /// <code> /// public event EventHandler{EventArgs{string}} EventOccurred; /// EventOccurred.Raise(sender, "The event occurred"); /// </code> /// </example> /// <see cref="http://geekswithblogs.net/HouseOfBilz/archive/2009/02/15/re-thinking-c-events.aspx"/> /// <typeparam name="T">Any data</typeparam> public class EventArgs<T> : EventArgs { public T Args { get; private set; } public EventArgs(T args) { Args = args; } public override string ToString() { return Args.ToString(); } } /// <summary> /// Tell subscribers, if any, that this event has been raised. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="handler">The generic event handler</param> /// <param name="sender">this or null, usually</param> /// <param name="args">Whatever you want sent</param> public static void Raise<T>(this EventHandler<EventArgs<T>> handler, object sender, T args) { // Copy to temp var to be thread-safe (taken from C# 3.0 Cookbook - don't know if it's true) EventHandler<EventArgs<T>> copy = handler; if (copy != null) { copy(sender, new EventArgs<T>(args)); } } class Tester { public static event EventHandler<EventArgs<DateTime>> GetTime_Rcvd; static void Main() { GetTime_Rcvd.Raise(null, MyDateTime); } }
Revision: 13989
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at May 14, 2009 16:30 by pckujawa
Initial Code
public class EventArgs<T> : EventArgs { public T Args { get; private set; } public EventArgs(T args) { Args = args; } } public static class EventExtensions { public static void Raise<T>(this EventHandler<EventArgs<T>> handler, object sender, T args) { if (handler != null) { handler(sender, new EventArgs<T>(args)); } } } class Tester { public static event EventHandler<EventArgs<DateTime>> GetTime_Rcvd; static void Main() { GetTime_Rcvd.Raise(null, MyDateTime); } }
Initial URL
http://geekswithblogs.net/HouseOfBilz/archive/2009/02/15/re-thinking-c-events.aspx
Initial Description
For a discussion of .NET events best-practices, see [Roy Osherove's blog post](http://weblogs.asp.net/rosherove/articles/DefensiveEventPublishing.aspx) and [this post](http://blogs.msdn.com/ericlippert/archive/2009/04/29/events-and-races.aspx). Be sure to read the comments sections for some good arguments for and against the presented methods. Also, there is a good [MSDN Magazine article on Event Accessors](http://msdn.microsoft.com/en-us/magazine/cc163533.aspx), which may be useful. Used in "Empire." The example shows an EventArgs with a DateTime object, but it could be a string or enumeration or whatever.
Initial Title
Raise and handle events generically
Initial Tags
event
Initial Language
C#