вторник, 21 октября 2008 г.

#endregion-ы

Самая необычная конструкция в C#, по моему мнению, это деректива #region. Удивительно в ней то, что введена она в язык исключительно ради более удобной работы с исходным кодом. Компилятор, говоря языком стандарта, не налагает никакой семантики на "содержимое" региона.

Служат регионы для возможности отделения блока кода внутри региона от остального кода по-соседству.

Используютя регионы, зачастую, именно так, как показано в примере из MSDN:

// preprocessor_region.cs
#region MyClass definition

public class MyClass
{
  public static void Main()
  {
  }
}

#endregion

то есть начинаются как:

#region Какое-либо описание ("заголовок")

а заканчиваются:

#endregion

чему во многом этому способствует "стандартный" сниппет (находящийся в "Program Files\Microsoft Visual Studio 9.0\VC#\Snippets\1033\Visual C#\pp_region.snippet"), позволяющий в несколько нажатий клавиш вставить в редактор блок #region#endregion и ввести лишь "заголовок".

Директива #endregion, кажется, нужна лишь для того, что бы обозначить окончание региона и больше проку от неё нет. Но … это только на первый взгляд :о) она так же, как и #region может содержать информативное текстовое описание, а, значит, подсказывать, что же за код находится выше неё в редакторе и, часто, это очень полезно если "размер" региона больше одного экрана или просто не хочется высоко поднимать глаза, что бы увидеть, что же написано в заголовке региона. Главное, получить это можно практически бесплатно, если для вставки регионов вы пользуетесь code-snippets. Достаточно открыть в редакторе (хоть в той же MSVS) указанный выше файл pp_region.snippet и заменить

<Code Language="csharp">
   <![CDATA[#region $name$
 $selected$$end$
#endregion
]]>
</Code>

на

<Code Language="csharp">
   <![CDATA[#region $name$
 $selected$$end$
#endregion $name$
]]>
</Code>

Теперь у вас будут более информативные и даже более стройные регионы:

// preprocessor_region.cs
#region MyClass definition

public class MyClass
{
  public static void Main()
  {
  }
}

#endregion MyClass definition

Не забывайте: человек может читать или просто просматривать код не только "сверху вниз", но и "снизу вверх", и в таком случае указанный у #endregion коментарий послужит на пользу.