Мое соглашение - не использовать их.
Если вы обнаружите, что ваш класс становится слишком большим, так что вам нужно скрыть огромные его части через регионы, я предлагаю ваш класс слишком сложный и должен быть разбит на части.
Я использую следующие регионы:
Private Member Variables
Constructor
Public Properties
Private Methods
Public Methods
Events
Причина в лучшей организации кода.
Я работаю с файлами, которые могут содержать более 2000 строк кода, и очень сложно поддерживать код без областей.
Возможно, вас заинтересует , скажете ли вы «нет» регионам C # .
Я думаю, что пока вы последовательны в своем проекте, не имеет большого значения, в каком порядке вы их записываете. Также будьте очень осторожны, злоупотребляя ими (отсюда и первоначальная ссылка!).
Нет ничего хуже, чем найти закрытый конструктор, который скрывает только одну строку кода.
Думаю, в конце концов, дело в личном вкусе. Как я уже сказал, последовательность - это ключ!
Думайте о них как о другой форме комментариев: дополнительная информация, смешанная с вашим кодом, для которого не выполнялась формальная проверка . Следовательно, код, скорее всего, устареет.
Поэтому НИКОГДА не дублируйте в комментариях или директивах региона то, что уже указано в коде.
Добавляйте только дополнительную информацию.
В частности, использование регионов для подтверждения того факта, что определенные элементы являются свойствами, событиями и т. Д., Совершенно бессмысленно. Самая распространенная проблема заключается в том, что вы создаете область для «частных методов», а затем редактируете один из них, чтобы сделать его общедоступным. Теперь вам нужно переместить его, а это значит, что в разнице со старой версией простое изменение заметить гораздо сложнее.
Я думаю, что нет необходимости в регионах. Они неразборчивы. Если вам нужен (подумайте, действительно ли вам нужен?) Код количества в вашем классе, вы можете использовать «частичный» класс для разделения логических единиц класса.
Лично я бы не рекомендовал делать области кода частью вашего соглашения о коде. Основная причина в том, что в регионах скрывается код , что потенциально может привести к таким проблемам, как:
Если вы заинтересованы в обеспечении соблюдения соглашения о стилях кодирования в вашей команде, взгляните на Microsoft StyleCop . Обратите внимание, что этот инструмент в настоящее время работает только для C #.
Кто-то однажды сказал, что соглашение, подобное приведенному выше:
- Частные поля
- Конструкторы
- Свойства класса
- Обработчики событий
- и т. Д.
похожи на сервировку стола, где все тарелки вместе, все ложки вместе, все ножи вместе и все вилки вместе .
Я считаю, что проблема #region
состоит в том, чтобы объединить связанные методы, определения событий и свойства в одном регионе. Однако необходимость этого вообще указывать на запах кода (либо ваш класс слишком велик, либо делает слишком много вещей), но это хороший первый шаг к его рефакторингу в лучший класс.
Когда я вижу регионы, я думаю, что код либо сгенерирован, либо нуждается в повторном факторинге.
Избегайте их использования, и когда вы почувствуете в них потребность, еще раз проанализируйте, что вы делаете, и попытайтесь разделить свой класс на более мелкие. В конечном итоге это поможет сделать приложение более читабельным, чем использование регионов.
#region Lotsa boring code and lookup tables
Я использую его для экономии места на экране, ничего больше :)
Я написал свой собственный фрагмент кода региона для VS 2008, который я всегда использую:
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>#class region</Title>
<Shortcut>#classregion</Shortcut>
<Description>Code snippet for #region in classes</Description>
<Author>Simon Linder</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>name</ID>
<ToolTip>Region name</ToolTip>
<Default>MyRegion</Default>
</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[#region Variables
$selected$ $end$
#endregion
#region Construction/Destruction
$selected$ $end$
#endregion
#region Properties
$selected$ $end$
#endregion
#region Public Methods
$selected$ $end$
#endregion
#region Private/Proteced Methods
$selected$ $end$
#endregion]]>
</Code>
</Snippet>
</CodeSnippet>
Как видите, я использую регионы для переменных
, Строительство / Разрушение
, Свойства
, Общедоступные
и Частные
методы. Я часто добавляю в частный регион еще один подобласть, называемый событиями
. Порядок регионов также отлично работает с StyleCop .