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




enum naming convention c# (12)

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

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

редактировать

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


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


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

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

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


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

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


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

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

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


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

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


Если в одном решении есть несколько проектов. Тогда лучше создать еще один проект 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 # для разделения каждой проблемы. Таким образом, легче искать любые перечисления


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

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


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

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

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


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

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

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

Но в любом случае они обычно встречаются с помощью ключа F12 .


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

enum SearchType { Forward, Reverse }

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

enum Result { Success, Error }

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

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





enums