Согласно Документация Правил StyleCop упорядочивание следующие.
В классе, структуре или интерфейсе: (SA1201 и SA1203)
В каждой из этих групп заказывают доступом: (SA1202)
В каждой из групп доступа, порядка помехами, тогда нестатичными: (SA1204)
В каждой из static/non-static групп полей, закажите только для чтения, тогда нетолько для чтения: (SA1214 и SA1215)
развернутый список является 130 строками долго, таким образом, я не разверну его здесь. Развернутая часть методов:
документация отмечает, что, если предписанный порядок не подходит - говорят, несколько интерфейсов реализуются, и методы интерфейса и свойства должны группироваться - тогда используют частичный класс для собирания в группу связанных методов и свойств.
Конечно, нет ничего на языке, который осуществляет его всегда. Я склонен группировать вещи видимостью (общественность, затем защищенная, тогда частная) и использовать #regions для связанных с группой вещей функционально, независимо от того, является ли это свойством, методом, или что бы то ни было. Способы строительства (ли фактический ctors или статические функции фабрики) являются обычно правильными наверху, так как они - первая вещь, о которой должны знать клиенты.
Я сохраняю его максимально простым (для меня, по крайней мере)
Перечисления
Объявления
Конструкторы
Переопределения
Методы
Свойства
Обработчик событий
Я предпочитаю поднимать частные поля наверху вместе с конструктором (конструкторами), затем помещать биты открытого интерфейса после этого, тогда биты закрытого интерфейса.
кроме того, если Ваше определение класса достаточно долго для упорядочивания объектов для имения значение очень, это, вероятно, запах кода указание, что класс является слишком большим и сложным, и необходимо осуществить рефакторинг.
Самым близким, которое Вы, вероятно, найдете, является "Руководство по проектированию, Управляемый код и Платформа.NET" ( http://blogs.msdn.com/brada/articles/361363.aspx ) Brad Abrams
, Много стандартов обрисованы в общих чертах здесь. Соответствующий раздел 2.8, я думаю.
Вместо того, чтобы группироваться видимостью или типом объекта (поле, свойство, метод, и т.д.), как насчет того, чтобы группироваться функциональностью?
Обычно я пытаюсь следовать за следующим шаблоном:
, Каждая часть (статичный и экземпляр) состоит из следующих типов элемента:
Тогда участники отсортированы по видимости (от меньше до более видимого):
, порядок не является догмой: простые классы легче считать, однако, более сложным классам нужна зависящая от контекста группировка.
единственные инструкции по кодированию, которые я видел предложенный для этого, должны поместить поля наверху определения класса.
я склонен помещать конструкторов затем.
мое замечание общего порядка было бы то, что необходимо придерживаться одного класса на файл и если класс является достаточно большим, что организация свойств по сравнению с методами является большим беспокойством, насколько большой класс, и необходимо ли осуществлять рефакторинг его так или иначе? это представляет несколько проблем?
Как упомянуто прежде нет ничего на языке C#, который диктует расположение, я лично использую регионы, и я делаю что-то вроде этого для среднего класса.
public class myClass
{
#region Private Members
#endregion
#region Public Properties
#endregion
#region Constructors
#endregion
#region Public Methods
#endregion
}
Это имеет смысл мне так или иначе
От StyleCop
частные поля, общедоступные поля, конструкторы, свойства, открытые методы, закрытые методы
Как StyleCop являются частью процесса сборки MS, Вы могли просмотреть это как фактический стандарт
Я не знаю о языке или промышленном стандарте, но я склонен помещать вещи в этот порядок с каждым разделом, обернутым в #region:
Операторы использования
Члены парламента, не занимающие официального поста Класса
Пространства имен
Общественные собственности
Конструкторы
Открытые методы
Закрытые методы
Я рекомендовал бы использовать стандарты кодирования от IDesign или те перечисленные на веб-сайт Brad Abram . Те - лучшие два, что я нашел.
Brad сказал бы...
участник Классов должен быть расположен в алфавитном порядке и сгруппирован в разделы (Поля, Конструкторы, Свойства, События, Методы, реализации Закрытого интерфейса, Вложенные типы)