Порядок предметов в классах: поля, свойства, конструкторы, методы - PullRequest
558 голосов
/ 30 сентября 2008

Есть ли официальное руководство по C # для заказа предметов с точки зрения структуры классов?

Идет ли:

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

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

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

Любые советы / предложения?

Ответы [ 15 ]

2 голосов
/ 30 сентября 2008

Я держу это как можно проще (по крайней мере, для меня)

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

2 голосов
/ 30 сентября 2008

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

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

2 голосов
/ 30 сентября 2008

единственное руководство по кодированию, которое я видел, предложенное для этого, это ставить поля в начале определения класса.

Я склонен ставить конструкторов следующими.

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

1 голос
/ 07 декабря 2017

Я знаю, что это старый, но мой порядок следующий:

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

  • Константы
  • Статические переменные
  • Поля
  • События
  • Конструктор (s)
  • Методы
  • Свойства
  • Делегаты

Мне также нравится записывать такие свойства (вместо сокращенного подхода)

// Some where in the fields section
private int someVariable;

// I also refrain from
// declaring variables outside of the constructor

// and some where in the properties section I do
public int SomeVariable
{
    get { return someVariable; }
    set { someVariable = value; }
}
1 голос
/ 30 сентября 2008

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

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