C#:你应该在哪里放置事件处理程序委托?

时间:2009-04-22 08:53:15

标签: c# event-handling conventions

我有这堂课:

public class GenericEventArgs<T> : EventArgs
{
    public GenericEventArgs() : this(default(T)) {}
    public GenericEventArgs(T value) { Value = value; }
    public T Value { get; private set; }
}

这个事件处理程序代表它:

public delegate void GenericEventHandler<T>(object sender, GenericEventArgs<T> e);

我目前在命名空间中将这些文件放在同一个文件中。这被认为是糟糕/凌乱/等等吗?因为,一般来说我会说每个文件应该只包含一个类。所以为了让它干净,我宁愿单独在文件中使用GenericEventArgs类。但后来我有这个GenericEventHandler<T>代表我不知道应该放在哪里。它应该有自己的文件吗?只有...那一行? (当然还有命名空间)

你通常如何做到这一点?

4 个答案:

答案 0 :(得分:9)

没有使用EventHandler<TEventArgs>的原因?我认为有一个等价的EventArgs<T>但我目前看不到它......无论如何,我将GenericEventArgs放入GenericEventArgs.cs

就个人而言,当我想介绍我自己的委托类型时(实际上这种情况越来越少见),我创建了一个Delegates.cs文件,其中包含所有适当的委托名称。然后我知道在哪里找到它们没有单一声明的文件。

答案 1 :(得分:2)

当我想创建自己的eventhandler委托时,我曾经创建了一个文件,其中包含我在自己的eventhandler委托中使用的EventArgs类的名称。 例如'MyEventArgs.cs'。

该文件包含MyEventArgs类和使用此类的MyEventHandler委托。

现在,我使用现有的通用EventHandler(EventHandler<T>),我只需创建自定义的EventArgs类。所以,这个'问题'不再存在了。 :)

答案 2 :(得分:1)

好吧,我将GenericEventArgs<T>类放在它自己的名为

的文件中

GenericEventArgs_T.cs与其他所有命名空间相同。

我会把你的代表(以及有事件的事件)放在将要公开该事件的类中。

答案 3 :(得分:-1)

我会做你正在做的事情,然后将所有未用于事件的代理放在一个名为Delegates.cs的单独的.cs文件中或类似的东西。