我在网上寻找一种更容易引发事件的方法,我发现了这个扩展类:
public static class EventExtensions
{
public static void Fire<TEventArgs>(this EventHandler<TEventArgs> @event, object sender, TEventArgs e)
where TEventArgs : EventArgs
{
if (@event != null)
@event(sender, e);
}
}这允许我使用
TestEvent.Fire(this,new CallEventArgs(1,"OK"));而不是
if(TestEvent != null)
TestEvent(this, new CallEventArgs(1,"OK"));因为我需要向我的事件传递一些参数,所以我认为我将创建通用的EventArgs类:
public class EventArgs<T> : EventArgs
{
public EventArgs()
{
Value = default(T);
}
public EventArgs(T aValue)
{
Value = aValue;
}
public T Value { get; set; }
}有了这个,我可以宣布我的事件为:
public event EventHandler<EventArgs<MyClass>> TestEvent; 然后用以下方式开火:
if(TestEvent != null)
TestEvent(this, new EventArgs<MyClass>(new MyClass{Id = 1, Description = "OK"}));我的问题是:
1.我应该如何修改我的扩展方法,以便能够像下面这样调用我的事件?
TestEvent.Fire(...);2.以这种方式扩展事件,然后编写扩展方法,这是一种很好的实践吗?
发布于 2014-02-21 11:15:38
EventArgs<T>。https://stackoverflow.com/questions/21932706
复制相似问题