C#:您应该将事件处理程序委托放置在何处?

C#:您应该将事件处理程序委托放置在何处?,c#,event-handling,conventions,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; } } 公共类GenericEventArgs:EventArgs { public

我有这门课:

public class GenericEventArgs<T> : EventArgs
{
    public GenericEventArgs() : this(default(T)) {}
    public GenericEventArgs(T value) { Value = value; }
    public T Value { get; private set; }
}
公共类GenericEventArgs:EventArgs
{
public GenericEventArgs():此(默认值(T)){}
public GenericEventArgs(T值){value=value;}
公共T值{get;私有集;}
}
以及该事件处理程序的委托:

public delegate void GenericEventHandler<T>(object sender, GenericEventArgs<T> e);
public委托void GenericEventHandler(对象发送方,GenericEventArgs e);
目前,我在同一个文件中的名称空间中将它们放在一起。那被认为是坏的/凌乱的/等等吗。?因为,一般来说,我会说每个文件应该只包含一个类。因此,为了让它干净,我更愿意将
GenericEventArgs
类单独放在文件中。但是我有一个
GenericEventHandler
委托,我不确定应该放在哪里。它应该有自己的文件吗?只是。。。那一行是什么?(当然还有名称空间)


您通常是如何做到这一点的?

我将
GenericEventArgs
类放在它自己的名为

GenericEventArgs\u T.cs与其他所有内容位于同一命名空间中


我会将您的委托(以及事件,如果有的话)放入将在其上公开该事件的类中。

当我想要创建自己的eventhandler委托时,我曾创建一个文件,该文件具有我在自己的eventhandler委托中使用的EventArgs类的名称。 例如“MyEventArgs.cs”

该文件包含MyEventTargets类和使用该类的MyEventHandler委托


但是,现在我使用现有的通用EventHandler(
EventHandler
),只需创建自定义EventArgs类。所以,这个“问题”对我来说已经不存在了

不使用
事件处理程序的原因是什么?我以为有一个等价的
EventArgs
,但我现在看不到它。。。无论如何,我会把
GenericEventArgs
放在
GenericEventArgs.cs


就我个人而言,当我想介绍我自己的委托类型(老实说,这种类型越来越少见)时,我会创建一个
Delegates.cs
文件,其中包含中命名空间的所有适当委托。然后,我知道在哪里可以找到它们,而不需要为单个声明创建一个文件。

我会做您已经在做的事情,然后将所有不用于事件的委托放在一个名为delegates.cs或类似文件的单独的.cs文件中。

因为设计器似乎不能很好地处理EventHandler类型的事件。也许这是一个应该报告的错误。。。()不要创建Delegates.cs。这会在您不需要的代码之间创建耦合。也就是说,当您只需要一个委托时,它会在所有委托上引入结构依赖关系。@Dave Hillier:这是什么意思?您在这里看到了什么实用上的缺点(与没有一堆小文件每个都包含一行有意义的内容相比)?它不像您首先指定每个单独的文件依赖于哪个源文件……实际的缺点是它使代码更难理解,因为委托没有在问题空间中与代码一起本地化。要使用C中的一个示例,请考虑stdlib.h中的内容,从名称中可以看出其中的内容是什么?这是一组很好的函数。我不认为创建任意分组是务实的。