应该把枚举放在单独的文件中还是放在另一个类中?

15

我目前有一个包含以下枚举的类文件:

using System;

namespace Helper
{
    public enum ProcessType
    {
        Word = 0,
        Adobe = 1,
    }
}

或者我应该将枚举包含在使用它的类中吗?

我注意到Microsoft为DockStyle创建了一个新的类文件:

using System;
using System.ComponentModel;
using System.Drawing.Design;

namespace System.Windows.Forms
{
    public enum DockStyle
    {
        None = 0, 
        Top = 1,
        Bottom = 2,
        Left = 3,
        Right = 4,.
        Fill = 5,
    }
}

3
这里的术语“Enumerator”让我感到困惑,我会自动想到IEnumerator<T>。你的意思应该是Enumerable(=enum)。 - Benjamin Podszun
3
一个枚举类型不是一个“枚举器”。它是一个“枚举类型”。枚举器是另外一种东西。 - Jeffrey L Whitledge
你应该用enumeration或者enumerated type替换enumerator。 - Seb
5
它既不是“可枚举的”、“枚举器”也不是“枚举类型”,而是“枚举”。根据规范,例如第4.1.9节。 - Jon Skeet
@Jon Skeet - 是的,规范就是这么说的。我错过了那部分内容。当我检查规范时,我能找到的只有“枚举”。不过很有趣,因为在Eric Lippert对该部分的注释中,他一直将其称为“枚举类型”。我猜他像我一样遵循了C语言的术语。 - Jeffrey L Whitledge
3个回答

29
如果枚举类型与一个类相关,则将其设置为嵌套类型可能是有意义的。如果它可以在其他地方使用,则最好将其设置为顶级类型。

1
我犹豫是否点赞,因为Jon Skeet的声望比上帝还高,但这仍然是一个很好的答案。 - Paul Schifferer
1
@严重故障:如果有什么安慰的话,现在已经太晚了,点赞也不会对声望值产生任何影响。 - Jon Skeet
另一方面,根据 FxCop 规则(CA1034:NestedTypesShouldNotBeVisible),Microsoft 建议避免使用公共嵌套类型:http://msdn.microsoft.com/en-us/library/ms182162.aspx - Jason Kresowaty
他仍然可以将枚举类型保留在文件中,但是在顶层。如果它与其关联的类一起更改,反之亦然,则将其保留在文件中仍然是不错的选择。 - galford13x
1
@binarycoder:对我来说,给出的理由并不特别令人信服。FxCop会讨厌为每个Protocol Buffer类生成的构建器...嗯,我仍然认为它们很有用。有时候你确实希望在比“命名空间”更细的层次上进行逻辑分组。 - Jon Skeet

6

通常情况下,如果没有其他类将使用它们,则我会看到枚举被放置在使用它们的类中,否则它们将被放置在自己的文件中。


3

我倾向于创建一个包含所有常用Enum的Enum.cs文件,如果我的Enum只与一个类相关,则将其嵌套在该类中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接