C # Каков наилучший способ создать перечисление, которое используется несколькими классами? - PullRequest
13 голосов
/ 22 января 2009

У меня есть enum, который используется несколькими классами. Каков наилучший способ реализовать это?

Ответы [ 7 ]

13 голосов
/ 22 января 2009

Обычно я просто выбрасываю их в пространство имен. Это то, что Microsoft сделала для написания .NET Framework, так что я тоже так делаю, для последовательности вы понимаете:)

8 голосов
/ 22 января 2009
  1. Поместите перечисления прямо в ваше пространство имен (или создайте для них новое пространство имен) или
  2. Поместите их в (статический?) Класс где-нибудь, если это имеет больше смысла.

Я бы оставил их в своем собственном файле для легкого доступа и хорошей организации в любом случае.

Я обычно не ставил бы их в класс, если они как-то не "там" принадлежат. Как у вас есть класс Car с перечислением типов автомобилей, а также класс Road и Bridge, которые могут устанавливать ограничения для типов автомобилей. Car.CarType кажется логичной организацией для этого ...

8 голосов
/ 22 января 2009

Поместите его в свой файл и просто объявите:

public enum Foo {a, b, c, d}

Рассмотрим ваше пространство имен, конечно.

7 голосов
/ 22 января 2009

XML-комментарии помогают, особенно если другие будут его использовать

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

Ваше имя в enum должно быть во множественном числе (в соответствии с инструкциями 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,
3 голосов
/ 22 января 2009

Вот пример двух перечислений в разных пространствах имен:

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
    }
}
1 голос
/ 22 января 2009

Вы можете поместить enum в новый кодовый файл с расширением .cs, чтобы intellisense работал, убедитесь, что он является частью вашего проекта / решения, и, конечно, он должен быть общедоступным перечислением, чтобы у вас была область действия решения. Если intellisense является проблемой, убедитесь, что вы создали свое решение один раз, у меня была эта проблема один раз, и перестройка решила ее. Пространство имен - хороший вариант, если вы хотите правильно организовать свой код и кодируете большой проект. .NET Framework был большой. поэтому он имеет перечисления в пространствах имен только для лучшего понимания и организации кода.

0 голосов
/ 22 января 2009

Мой совет - вообще не использовать Enums. Вместо этого используйте синглтоны.

Как

    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()
        {
        }
    }

В большинстве случаев это работает лучше и лучше расширить позже.

С наилучшими пожеланиями

Matze

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...