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




enum naming convention c# (10)

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

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

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

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

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

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


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


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

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

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


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


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

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


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

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

Все, что облегчает отладку, мне нравится.


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

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

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


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


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

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

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

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





enums