Должны ли перечисления в C# иметь свой собственный файл? [закрытый]



У меня есть класс, который использует перечисление, перечисление в настоящее время находится в своем собственном файле, который кажется расточительным.



каково общее мнение о перечислениях, помещаемых в пространство имен файла, в котором они используются? Или enum действительно должен жить в своем собственном файле cs?



Edit



Я должен упомянуть, что в то время как рассматриваемый класс использует эти перечисления, так же как и внешние вызывающие устройства. Другими словами, другой класс может установить эти перечисления. Таким образом, они не используются внутри класса, иначе этот вопрос был бы без проблем.

842   15  

15 ответов:

Я бы не сказал "расточительный" (сколько стоит дополнительный файл?), но это часто неудобно. Обычно есть один класс, который наиболее тесно связан с перечислением, и я помещаю их в тот же файл.

Это действительно просто вопрос предпочтений.

Я предпочитаю помещать каждое перечисление в свой собственный файл (аналогично для каждого интерфейса, класса и структуры, независимо от того, насколько они малы). Это облегчает их поиск, когда я прихожу из другого решения или иначе уже не имею ссылки на рассматриваемый тип.

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

Это исключительно вопрос стиля. То, что я обычно делаю, это иметь файл с именем Enums.cs в решении, в котором собираются объявления перечисления.

но они обычно находятся через F12 ключ в любом случае.

вопрос, который нужно задать себе: есть ли что-нибудь о типе перечисления в C#, который указывает, что я должен относиться к нему иначе, чем ко всем другим типам, которые я создаю?

если перечисление является открытым, оно должно рассматриваться как любой другой открытый тип. Если он является закрытым, объявите его как вложенный член класса, используя его. Нет никаких веских причин помещать два открытых типа в один и тот же файл просто потому, что один из них является перечислением. Тот факт, что это публичный тип-это все, что имеет значение; аромат типа не имеет.

еще одним преимуществом размещения каждого типа (class, struct, enum) в своем собственном файле является управление версиями. Вы можете легко получить всю историю типа.

Я размещаю в основном внутри пространства имен и вне класса, чтобы он был легко доступен другим классам в этом пространстве имен, как показано ниже.

namespace UserManagement
{
    public enum UserStatus { Active, InActive }
    class User
    {
        ...
    }
}

обычно я предпочитаю, чтобы мои перечисления были в том же файле, что и класс, который он, скорее всего, будет атрибутом. Если, например, у меня есть класс Task после перечисления TaskStatus будет в том же файле.

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

Я думаю, что это зависит от объема перечисления. Например, если перечисление относится к одному классу, например, используется, чтобы избежать сценария magic constant, то я бы сказал, что он помещен в тот же файл, что и класс:

enum SearchType { Forward, Reverse }

если перечисление является общим и может использоваться несколькими классами для разных сценариев, то я был бы склонен использовать его в своем собственном файле. Например, ниже можно использовать для нескольких целей:

enum Result { Success, Error }

Это зависит от того, какой доступ нужен.

если перечисление используется только одним классом, его можно объявить в этом классе, потому что вам не нужно использовать его в другом месте.

для перечислений, используемых несколькими классами или в общедоступном API, я всегда буду хранить определение в своем собственном файле в соответствующем пространстве имен. Это гораздо проще найти таким образом, и стратегия следует шаблону one-object-per-file, который хорошо использовать с классами и интерфейсами также.

Я склонен помещать перечисления в свой собственный файл по очень простой причине: как и в классах и структурах, приятно знать ровно где искать, если вы хотите найти определение типа: в файле с тем же именем. (Справедливости ради, в VS вы всегда можете использовать "перейти к определению".)

очевидно, что это может выйти из-под контроля. Коллега, где я работаю, даже делает отдельные файлы для делегатов.

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

Если перечисление не зависит от исходного класса, то его размещение в отдельном файле упрощает будущие изменения.

Если вы используете надстройку Usysware File Browser для Visual Studio, вы можете очень быстро найти файлы с определенными именами в своем решении. Представьте себе, что вы ищете перечисление, которое не находится в своем собственном файле, а вместо этого похоронено в каком-то файле в гигантском решении.

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

и, как было заявлено... Насколько расточительным является файл, который в конечном итоге составляет всего пару КБ?

Мне нравится иметь один общий файл перечислений с именем E, содержащий каждое отдельное перечисление, тогда любое перечисление можно получить с помощью E... и они находятся в одном месте, чтобы управлять.

если у вас несколько проектов в одном решении. Тогда лучше создать другой проект Utilities. Затем создайте папку \Enumerations и создать вложенную static class. А затем назначьте каждый статический класс, в котором вы создадите перечисление, соответствующее имени ваших проектов. Например, у вас есть проект с именем DatabaseReader и DatabaseUsers, тогда вы можете назвать статический класс как

public static class EnumUtility {
    #region --Database Readers Enum
    public static class EnumDBReader {
         public enum Actions { Create, Retrieve, Update, Delete}; 
    }
    #endregion

    #region --Database Users Enum
    public static class EnumDBUsers {
         public enum UserIdentity { user, admin }; 
    }
    #endregion

}

тогда все перечисления, которые могут быть использованы во всех решениях для каждого проекта, будут объявлены оно. Используйте #region отделить каждую заботу. Таким образом, легче искать любые перечисления

очень просто огромное преимущество для того чтобы отделить архив. Когда любой объект находится в своем собственном MyObjectName.cs-файл... вы можете перейти в Обозреватель решений и ввести MyObjectName.cs и будет показан ровно 1 файл. Все, что делает отладку лучше, хорошо.

еще одно преимущество на аналогичной ноте, если вы ищете все файлы (ctrl+shft+F) имя, вы можете найти 20 ссылок в одном файле... и это имя будет частью различных объекта. В окне найти результаты все, что вы можете увидеть, это номер строки и имя файла. Вам нужно будет открыть файл и прокрутить его, чтобы выяснить, в каком объекте находится найденная ссылка.

все, что делает отладку проще, мне нравится.

Comments

    Ничего не найдено.