Существуют ли официальные правила C # для заказа предметов с точки зрения структуры классов?
Это идет:
- Публичные поля
- Частные поля
- свойства
- Конструкторы
- Методы
?
Мне интересно, есть ли жесткое и быстрое правило о порядке вещей? Я вроде повсюду. Я хочу придерживаться определенного стандарта, чтобы я мог делать это везде.
Реальная проблема заключается в том, что мои более сложные свойства выглядят очень похожими на методы, и они кажутся неуместными наверху перед конструктором.
Любые советы / предложения?
c#
.net
coding-style
code-cleanup
code-structure
mmcdole
источник
источник
public
иprotected
членов.private
илиinternal
участников (я полагаю). Хороший способ увидетьpublic
иprotected
, однако. Мы можем видеть источник .NET Framework классов, здесь referencesource.microsoft.com тожеОтветы:
В соответствии с документацией правил StyleCop, порядок выглядит следующим образом.
Внутри класса, структуры или интерфейса: (SA1201 и SA1203)
Внутри каждой из этих групп порядок по доступу: (SA1202)
Внутри каждой из групп доступа упорядочение по статическому, затем нестатическому: (SA1204)
Внутри каждой из статических / нестатических групп полей упорядочьте только для чтения, затем не только для чтения: (SA1214 и SA1215)
Развернутый список имеет длину 130 строк, поэтому я не буду его здесь раскручивать. Развернутая часть методов:
В документации отмечается, что если предписанный порядок не подходит, скажем, реализуется несколько интерфейсов, а методы и свойства интерфейса должны быть сгруппированы вместе, - тогда используйте частичный класс, чтобы сгруппировать связанные методы и свойства вместе.
источник
Вместо того, чтобы группировать по видимости или по типу элемента (поле, свойство, метод и т. Д.), Как насчет группировки по функциональности?
источник
Это старый, но все еще очень актуальный вопрос, поэтому я добавлю следующее: что вы ищете в первую очередь, когда открываете файл класса, который вы могли или не могли прочитать раньше? Поля? Свойства? По своему опыту я понял, что почти всегда я иду на охоту за конструкторами, потому что самое основное, что нужно понять, это то, как строится этот объект.
Поэтому я начал помещать конструкторы первыми в файлы классов, и результат был психологически очень положительным. Стандартная рекомендация помещать конструкторы после множества других вещей кажется диссонирующей.
Предстоящая функция первичного конструктора в C # 6 свидетельствует о том, что естественное место для конструктора находится на самом верху класса - на самом деле первичные конструкторы указываются даже перед открытой фигурной скобкой.
Забавно, как много меняет такое изменение порядка. Это напоминает мне о том, как
using
раньше упорядочивались операторы - сначала с пространствами имен System. Команда Visual Studio «Упорядочить использование» использовала этот порядок. Теперьusing
s просто упорядочены в алфавитном порядке, без особой обработки для пространств имен System. Результат становится проще и чище.источник
Я не знаю ни языка, ни отраслевого стандарта, но я склоняюсь к тому, чтобы упорядочить каждый раздел в #region:
используя заявления
Пространство имен
Учебный класс
Частные участники
Публичные свойства
Конструкторы
Публичные методы
Частные методы
источник
Я бы порекомендовал использовать стандарты кодирования от IDesign или перечисленные на сайте Брэда Абрама . Это лучшие два, которые я нашел.
Бред сказал бы ...
источник
Как упоминалось ранее, в языке C # нет ничего, что определяло бы макет, я лично использую регионы и делаю что-то подобное для среднего класса.
В любом случае это имеет смысл для меня
источник
От StyleCop
частные поля, открытые поля, конструкторы, свойства, открытые методы, частные методы
Поскольку StyleCop является частью процесса сборки MS, вы можете рассматривать это как стандарт де-факто
источник
Обычно я стараюсь следовать следующей схеме:
Каждая часть (статическая и экземплярная) состоит из следующих типов элементов:
Затем элементы сортируются по видимости (от меньшего к более заметному):
Порядок не является догмой: простые классы легче читать, однако более сложные классы нуждаются в контекстно-зависимой группировке.
источник
Я предпочитаю заказывать по виду, а затем уменьшать видимость следующим образом
Я знаю, что это нарушает Style Cop, и если кто-то может дать мне вескую причину, почему я должен поместить детали реализации типа перед его интерфейсом, я готов изменить его. В настоящее время я сильно предпочитаю ставить частных членов на последнее место.
Примечание: я не использую открытые или защищенные поля.
источник
Самое близкое, что вы можете найти, это «Рекомендации по проектированию, управляемый код и .NET Framework» ( http://blogs.msdn.com/brada/articles/361363.aspx ) Брэда Абрамса.
Многие стандарты изложены здесь. Соответствующий раздел - 2,8, я думаю.
источник
единственное руководство по кодированию, которое я видел, предложило для этого - поместить поля в верхнюю часть определения класса.
Я склонен ставить конструкторов дальше.
Мой общий комментарий будет таким: вы должны придерживаться одного класса на файл, и если класс достаточно велик, чтобы организация свойств по сравнению с методами вызывала большую озабоченность, насколько велик класс, и следует ли вам его рефакторинг в любом случае? это представляет многократные проблемы?
источник
Я предпочитаю размещать закрытые поля вверху вместе с конструктором (ами), затем после этого ставить биты открытого интерфейса, затем биты частного интерфейса.
Кроме того, если определение вашего класса достаточно длинное, чтобы порядок элементов имел большое значение, это, вероятно, запах кода, указывающий на то, что ваш класс слишком громоздкий и сложный, и вам следует провести рефакторинг.
источник
Я держу это настолько просто насколько возможно (для меня по крайней мере)
Перечисления
Объявления
Конструкторы
Переопределяют
Методы
Свойства
Обработчик событий
источник
Конечно, в языке нет ничего, что могло бы навязать это. Я склонен группировать вещи по видимости (общедоступный, затем защищенный, затем частный) и использовать #regions для функциональной группировки связанных вещей, независимо от того, является ли это свойство, метод или что-то еще. Методы конструирования (будь то фактические ctors или статические фабричные функции) обычно находятся на самом верху, поскольку они - первая вещь, о которой клиенты должны знать.
источник
Я знаю, что это старый, но мой заказ выглядит следующим образом:
в порядке публичного, охраняемого, частного, внутреннего, абстрактного
Мне также нравится выписывать такие свойства (вместо сокращенного подхода)
источник