繁体   English   中英

C#创建被多个类使用的枚举的最佳方法是什么?

[英]C# What is the best way to create an enum that is used by multiple classes?

我有一个供多个类使用的枚举。 实现此目的的最佳方法是什么?

通常,我只是将它们放入命名空间中。 这是Microsoft编写.NET框架的方法,所以我也这样做,以确保一致性:)

将其放在自己的文件中,然后声明:

公共枚举Foo {a,b,c,d}

当然,请考虑您的命名空间。

  1. 将枚举放在您的命名空间中(或为其创建一个新的命名空间),或者
  2. 如果更合理,则将它们放在某个(静态?)类中。

我会将它们保存在自己的文件中,以方便访问和组织良好。

除非他们以某种方式“属于”那里,否则我通常不会将它们放在课堂上。 就像您有一个带有汽车类型枚举的Car类,以及一个可以设置汽车类型限制的Road类和Bridge类。 Car.CarType似乎是对此的合乎逻辑的组织。

XML注释有帮助,特别是如果其他人会使用它

 /// <summary>
/// Defines the types of cars we support
/// </summary>
public enum CarType
{
    /// <summary>
    /// VW - the peoples car
    /// </summary>
    Volkswagen,

您的枚举名称应为复数形式(按照FxCop的指示)

public enum CarTypes

添加数值并使用按位编号,即使您不打算使用按位编号(稍后重新编号也很麻烦)。

    Volkswagen = 1,

    /// <summary>
    /// They own lambo... can't be all that bad
    /// </summary>
    Audi = 2,

    /// <summary>
    /// Good, cheap, reliable
    /// </summary>
    Toyota = 4,

这是在不同名称空间中具有两个枚举的示例:

using TotallyDifferentNameSpace.Enums;

namespace EnumEx
{
    class Program
    {
        static void Main(string[] args)
        {
            CarType car = CarType.Audi;
            PetrolType pType = PetrolType.Diesel;
        }
    }

    public enum CarType
    {
        Volkswagen,
        Audi,
        Toyota,
        Ford,
        Porsche,
        Lada
    }
}

namespace TotallyDifferentNameSpace.Enums
{
    public enum PetrolType
    {
        Gasoline,
        Diesel
    }
}

您可以将枚举放入扩展名为.cs的新代码文件中,以使intellisense正常工作,请确保它是您的项目/解决方案的一部分,当然,它应该是公共枚举,以便为您提供解决方案的范围。 如果intellisense是一个问题,请确保您一次构建您的解决方案,我曾经遇到过这个问题,只是通过重新构建解决了它。 如果要正确地组织代码并且要编写大型项目,则命名空间是一个不错的选择。 .NET框架很大。 因此它在命名空间下具有枚举,只是为了更好地理解和组织代码。

我的建议是完全不使用枚举。 改用单例。

喜欢

    public class A : ISomeInterface
    {
        public static readonly A Instance = new A();
        private A()
        {
        }

    }

    public class B : ISomeInterface
    {
        public static readonly B Instance = new A();
        private B()
        {
        }
    }

在大多数情况下,效果更好,以后再扩展也更好。

最好的祝愿

马策

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM