2010-06-19 2 views
6

У меня есть несколько классов EventArgs только один поле и соответствующее свойство, чтобы прочитать его:Общий встроенный EventArgs для хранения только одного свойства?

public class SomeEventArgs : EventArgs 
{ 
    private readonly Foo f; 
    public SomeEventArgs(Foo f) 
    { 
     this.f = f; 
    } 
    public Foo Foo 
    { 
     get { return this.f; } 
    }  
} 

Есть ли встроенный, общий класс для реализации такого поведения, или я должен катиться самостоятельно?

public class GenericEventArgs<T> : EventArgs 
{ 
    private readonly T value; 
    public GenericEventArgs(T v) 
    { 
     this.value = v; 
    } 
    public T Value 
    { 
     get { return this.value; } 
    }  
} 

P.S. я написал suggestion on Microsoft Connect

+1

В некоторых сборках или пространствах Microsoft существуют реализации 'DataEventArgs ' '. См. Также: http://stackoverflow.com/questions/3312134/does-net-have-a-built-in-eventargst/15896769#15896769 –

ответ

1

Не думаю, что есть.
Похоже, вы не единственный, кто задал себе этот вопрос.
Посмотрите here

3

Если является один, это, конечно, не очень хорошо огласку! (т. е. это не то, что вы есть означает для использования для вещей общего назначения, например Func<T>.) Я уже думал об одном и том же. Это не редкое требование, ИМО.

Один недостаток этого заключается в том, что он не имеет значимого имени для собственности, конечно - это похоже на эквивалент EventArgsTuple. Но если у вас есть несколько различных вариантов использования для этого, и он будет действительно будет очевиден, что это значит, идите на это :)

+0

@ Ссылка Itay следует интересному имени: просто 'EventArgs '. Очень интересно, почему в FCL пока нет такого очень полезного класса! – abatishchev

2

На этой странице внизу вы можете увидеть все классы наследуются от класса EventArgs: http://msdn.microsoft.com/en-us/library/system.eventargs.aspx

Наиболее подходящим является ReturnEventArgs http://msdn.microsoft.com/en-us/library/ms615572.aspx, но этот класс находится в PresentationFramework.dll, то есть только ссылки на проекты WPF.

Поэтому я рекомендую создать свой собственный.

+0

Отлично, спасибо! Я, оказывается, кодирую в WPF :-) – Heliac

Смежные вопросы