Порядок предметов в классах: поля, свойства, конструкторы, методы

[g0] Существует три sqrt-метода: один, который принимает long, один, который принимает float, и другой, который принимает двойное значение. [/g0] [g1] Попробуйте [/g1] [f1] [g2], чтобы сообщить компилятор, который вы хотите использовать двойную версию, а затем конвертировать обратно в int. [/g2]
570
задан Stephen Kennedy 28 February 2018 в 11:18
поделиться

12 ответов

Согласно Документация Правил StyleCop упорядочивание следующие.

В классе, структуре или интерфейсе: (SA1201 и SA1203)

  • Постоянные Поля
  • Поля
  • Конструкторы
  • Финализаторы (Деструкторы)
  • Делегаты
  • События
  • Перечисления
  • Интерфейсы ( интерфейсные реализации )
  • Свойства
  • Индексаторы
  • Методы
  • Структуры
  • Классы

В каждой из этих групп заказывают доступом: (SA1202)

  • общественность
  • внутренний
  • защитила внутренний
  • , защитил
  • частный

В каждой из групп доступа, порядка помехами, тогда нестатичными: (SA1204)

  • статичный
  • нестатичный

В каждой из static/non-static групп полей, закажите только для чтения, тогда нетолько для чтения: (SA1214 и SA1215)

  • только для чтения
  • нетолько для чтения

развернутый список является 130 строками долго, таким образом, я не разверну его здесь. Развернутая часть методов:

  • общедоступные статические методы
  • открытые методы
  • внутренние статические методы
  • внутренние методы
  • защищенные внутренние статические методы
  • защищенные внутренние методы
  • защищенные статические методы
  • защищенные методы
  • частные статические методы
  • закрытые методы

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

833
ответ дан Corio 28 February 2018 в 11:18
поделиться

Конечно, нет ничего на языке, который осуществляет его всегда. Я склонен группировать вещи видимостью (общественность, затем защищенная, тогда частная) и использовать #regions для связанных с группой вещей функционально, независимо от того, является ли это свойством, методом, или что бы то ни было. Способы строительства (ли фактический ctors или статические функции фабрики) являются обычно правильными наверху, так как они - первая вещь, о которой должны знать клиенты.

1
ответ дан Jeff Kotula 28 February 2018 в 11:18
поделиться

Я сохраняю его максимально простым (для меня, по крайней мере)

Перечисления
Объявления
Конструкторы
Переопределения
Методы
Свойства
Обработчик событий

2
ответ дан Pat 28 February 2018 в 11:18
поделиться

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

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

2
ответ дан Community 28 February 2018 в 11:18
поделиться

Самым близким, которое Вы, вероятно, найдете, является "Руководство по проектированию, Управляемый код и Платформа.NET" ( http://blogs.msdn.com/brada/articles/361363.aspx ) Brad Abrams

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

3
ответ дан Rory Becker 28 February 2018 в 11:18
поделиться

Вместо того, чтобы группироваться видимостью или типом объекта (поле, свойство, метод, и т.д.), как насчет того, чтобы группироваться функциональностью?

32
ответ дан Ryan Lundy 28 February 2018 в 11:18
поделиться

Обычно я пытаюсь следовать за следующим шаблоном:

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

, Каждая часть (статичный и экземпляр) состоит из следующих типов элемента:

  • операторы (всегда статичны)
  • поля (инициализированный перед конструкторами)
  • конструкторы
  • деструктор ( традиция для следования за конструкторами )
  • свойства
  • методы
  • события

Тогда участники отсортированы по видимости (от меньше до более видимого):

  • частный
  • внутренний
  • внутренний защищенный
  • защитил
  • общественность

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

4
ответ дан Michael Damatov 28 February 2018 в 11:18
поделиться

единственные инструкции по кодированию, которые я видел предложенный для этого, должны поместить поля наверху определения класса.

я склонен помещать конструкторов затем.

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

2
ответ дан Hamish Smith 28 February 2018 в 11:18
поделиться

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

public class myClass
{
#region Private Members

#endregion
#region Public Properties

#endregion

#region Constructors

#endregion
#region Public Methods

#endregion
}

Это имеет смысл мне так или иначе

4
ответ дан Mitchel Sellers 28 February 2018 в 11:18
поделиться

От StyleCop

частные поля, общедоступные поля, конструкторы, свойства, открытые методы, закрытые методы

Как StyleCop являются частью процесса сборки MS, Вы могли просмотреть это как фактический стандарт

4
ответ дан blowdart 28 February 2018 в 11:18
поделиться

Я не знаю о языке или промышленном стандарте, но я склонен помещать вещи в этот порядок с каждым разделом, обернутым в #region:

Операторы использования

Члены парламента, не занимающие официального поста Класса

Пространства имен

Общественные собственности

Конструкторы

Открытые методы

Закрытые методы

12
ответ дан Wayne 28 February 2018 в 11:18
поделиться

Я рекомендовал бы использовать стандарты кодирования от IDesign или те перечисленные на веб-сайт Brad Abram . Те - лучшие два, что я нашел.

Brad сказал бы...

участник Классов должен быть расположен в алфавитном порядке и сгруппирован в разделы (Поля, Конструкторы, Свойства, События, Методы, реализации Закрытого интерфейса, Вложенные типы)

14
ответ дан Elijah Manor 28 February 2018 в 11:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: