Подтвердить что ты не робот

Каков наилучший способ компоновки класса С#?

Есть ли стандартный способ выкладки файла С#? Как в, Поля, затем Свойства, затем Конструкторы и т.д.?

Вот что я обычно делаю, но мне интересно, есть ли стандартный способ?

  • Вложенные классы или перечисления
  • Поля
  • Свойства
  • События
  • Конструкторы
  • Общие методы
  • Частные методы

Собирают ли люди свои поля вместе, или они помещают их со свойствами? Или люди не беспокоятся о заказе? Кажется, что Visual Studio делает это так сложно.

Изменить. Перемещаем другую часть о ReSharper здесь: Сделайте Resharper уважающим ваше предпочтение коду.

4b9b3361

Ответ 1

Я обычно использую Microsoft StyleCop, который имеет установленный порядок в соответствии с правилом SA1201:

Причина Элемент внутри кода С# файл не работает по отношению к другие элементы в коде.

Описание правила Нарушение этого правило возникает, когда элементы кода в файле не соответствуют стандарту схема заказа.

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

  • Директивы внешнего интерфейса.
  • Использование директив
  • Пространство имен
  • Делегаты
  • Перечисления
  • Интерфейсы
  • Структуры
  • Классы

Внутри класса, структуры или интерфейса, элементы должны быть расположены в в следующем порядке:

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

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

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

  • Добавить частичный атрибут в класс, если класс еще не частичная.

  • Добавьте второй неполный класс с тем же именем. Можно разместить это в том же файле, чуть ниже первоначальный класс или в течение второго файл.

  • Переместить наследование интерфейса и всех членов интерфейса реализации во вторую часть класс.

Ответ 2

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

Чтобы ответить на вопрос о reshaper, установите флажок Макет членов-членов в Параметры (под С# node). Это не просто, но можно изменить порядок компоновки.

Ответ 3

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


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

Но главное - держать его последовательным и целенаправленным.

Ответ 4

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

public class Whatever {
   // private data here
   int _someVal = kSomeConstant;

   // constructor(s)
   public Whatever() { }

#region FabulousTrick  // sometimes regionize it
   // fabulous trick code
   private int SupportMethodOne() { }
   private double SupportMethodTwo() { }
   public void PerformFabulousTrick(Dog spot) {
       int herrings = SupportMethodOne();
       double pieces = SupportMethodTwo();
       // etc
   }
#endregion FabulousTrick
   // etc
}

Ответ 5

Вы можете попробовать Regionerate, чтобы помочь в этом. Мне это очень нравится, и это Скотт Гензельман выбирает.

Ответ 6

Как сказано, я не думаю, что есть лучший способ как таковой. Но какая-то организация помогает вам программисту.

Как часто в длинном проекте вы проводили время, поднимая и опуская один или несколько исходных файлов, пытаясь найти одну из ваших функций.

Таким образом, я использую #region для этого способом -

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

  • область управления: все функции, которые непосредственно взаимодействуют с элементами управления в форме.

  • область MDI: установите mdi up

    Затем будут некоторые функции, а не интерфейс,

  • область поиска в регулярном выражении

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

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

Ответ 7

Чем бы вы ни производились. Некоторые вроде частных полей рядом с аксессуарами свойств, некоторые вроде полей вместе над конструкторами. Самое главное, что может помочь, это группировать элементы "как". Мне лично нравится собирать частные методы, частные свойства и т.д.

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

Ответ 8

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

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

IMHO порядок не так важен, потому что VS очень легко находит всех участников (особенно, если вы следуете одному подходу класса/интерфейса/перечисления на файл), и Sandcastle будет группировать их, если вы хотите создавать документы, поэтому я буду больше беспокоиться о том, чтобы дать им значимые имена.

Ответ 9

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

Ответ 10

Я использую следующий макет:

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

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