Создание и использование фрагментов кода в Visual Studio 2005

ОГЛАВЛЕНИЕ

Если вы создаете свое веб-приложение при помощи Visual Basic, вы уже наверняка в курсе того, что Visual Studio .NET 2002/2003 предоставляет превосходные возможности по автозаполнению, которых так не хватало (со стороны) C#. К примеру, при создании класса в Visual Studio .NET 2002/2003 при помощи Visual Basic,как только вы напишете Public Property propertyName As Type и нажмете Enter, Visual Studio автоматически расширяет код и включает оба средства доступа Get и Set:
Public Property propertyName As Type
   Get

   End Get
   Set (ByVal Value As Type)

   End Set
End Property

Автозаполнение в Visual Basic также срабатывает при написании циклов, условных инструкций, классов и т.д. Хотя это не экономит столько времени как IntelliSense, поддержка автозаполнения в Visual Basic определенно ускоряет процесс. При переходе из Visual Basic проекта к C# проекту в .NET 1.x, создается впечатление, что вас намеренно замедляют, заставляя ввод(и)ить полный синтаксис всех свойств и потока управляющих команд. (Вы можете избежать недостатка автозаполнения в C#, а также улучшить Visual Basic при помощи макросов.)

Хорошей новостью является то, что Visual Studio 2005 избавляет нас от недостатка поддержки автозаполнения в C#. В VS 2005, наряду с использованием автозаполнения в C#, вы также можете настроить логику автозаполнения, путем построения ваших собственных ускоренных методов автозаполнения. Данные методы называются фрагментами кода(snippets), и они определены при помощи XML-файлов, которые вы можете сами создать, делиться ими с коллегами, а также импортировать другие фрагменты кода. Более того, фрагменты кода в Visual Studio 2005 могут включать в себя части, где значения зависят от контекста, с которым был введен данный фрагмент кода, либо могут быть отмечены для того, чтобы  разработчик дописал при помощи фрагмента кода.

В данной статье мы рассмотрим особенность использования фрагментов кода в Visual Studio 2005. К концу данной статьи мы увидим способ создания и использования фрагментов кода, а также способ импорта чужих фрагментов. Читайте далее, чтобы узнать больше об этом!


Используем фрагменты кода

Существует два способа использования фрагментов кода в Visual Studio 2005:

  • Щелкнуть правой кнопкой мыши и  выбрать Insert Snippet либо Surround With из контекстного меню (Примечание: Surround With не появляется в контекстном меню для Visual Basic файлов), либо
  • Путем написания ярлыка для фрагмента кода и нажатия кнопки Tab.
Каждый фрагмент кода может иметь свой ярлык, при написании которого код фрагмента автоматически вставляется в текст. Второй способ обычно работает быстрее и заключается в использовании мыши и проходе по списку фрагментов кода в интерфейсе Listbox, но для того чтобы использовать такой подход, вы должны знать эту ссылку. Так что при первом знакомстве с фрагментами кода легче использовать контекстное меню.

Например, представьте, что вы создаете класс C# для моделирования бизнес-объектов вашего веб-приложения, и вам необходимо определить несколько свойств. Опять-таки, в Visual Basic свойство автозаполнения позволяет вам просто ввести Public Property propertyName As Type. Имея C#, вы должны использовать фрагменты кода. В классе кликните правой кнопкой мыши и выберите Insert Snippet (Вставить фрагмент кода). Это выведет выпадающий список всех зарегистрированных фрагментов кода. Для добавления property выберите код prop, как показано выше.


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

private int myVar;

public int MyProperty
{
   get { return myVar; }
   set { myVar = value; }
}

При нажатии клавиши табуляции вы можете перемещаться между зелеными секциями, тем самым настраивая фрагмент кода. К примеру, обновления типа в поле private автоматически обновляют его в выражении свойства; тоже самое - для названия поля. Ярлыком для данного фрагмент является prop. Тем самым, вы также можете внедрить данный фрагмент вручную, введя слово prop и нажав клавишу Tab. (C# включает фрагменты кода в стандартный выпадающий список IntelliSense; в Visual Basic вы можете нажать клавишу «?» после написания нескольких букв и также увидите список соответствующих фрагментов.)

Вскоре мы увидим, что Visual Basic предлагает несколько фрагментов кода, содержащих несколько строк кода для выполнения обычных задач, таких как считывание данных из Microsoft Access в DataSet, либо считывание текста из файла. И поскольку вы создаете свои собственные фрагменты кода, вы также сможете создать свои собственные для тех обычных задач, которые будут уникальны и созданы специально для вашего приложения.


Встроенные фрагменты кода

Visual Studio 2005 обладает несколькими фрагментами кода, ориентированными на конкретный язык. Чтобы исследовать имеющиеся фрагменты кода, зайдите в меню Tools и выберите Code Snippet Manager (смотрите изображение внизу). Отсюда вы можете выбрать интересующий вас язык программирования - Visual Basic, Visual C#, Visual J# или XML - и затем перейти к доступным фрагментам. Visual C# содержит немалое количество фрагментов - набор реструктурирующих фрагментов наряду с простыми фрагментами кода управляющей логики и обычными образцами. Visual Basic обладает богатой библиотекой фрагментов кода, имеющей фрагменты для генерирования случайных чисел, для работы с файловой системой, выполнения обычных математических вычислений, шифрования и дешифрования строк, преобразования типа и т.д.


Для каждого фрагмента кода диспетчер (Code Snippet Manager) показывает описание, ярлык и автора. В дополнение, расположение фрагментов показано в текстовом поле Location. Как мы позже убедимся, каждый фрагмент на самом деле является файлом,основанным на XML с расширением .snippet. Поскольку каждый фрагмент кода является индивидуальным текстовым файлом, вы с легкостью можете изменить существующий фрагмент, добавить свои либо импортировать чужие. Но перед тем как окунуться в создание и обмен фрагментами, давайте для начала рассмотрим способ хранения фрагментов в файловой системе, а также используемую разметку.

Как работает фрагмент кода?

Фрагмент кода - это файл с XML-форматированием в файловой системе, который имеет расширение .snippet, а также зарегистрированный через Диспетчер фрагментов кода (Code Snippet Manager). Разметка .snippet файла предоставляет такую мета-дату про фрагмент кода, как описание, ярлык, заголовок, необходимые ссылки (к сожалению, поддерживается только фрагментами кода Visual Basic) и т.д., наряду с содержимым фрагмента, которое является кодом, внедренным в текст при применении фрагмента. Вы можете исследовать фрагменты кода, предоставляемые вместе с Visual Studio 2005, открыв каталог, указанный в поле Location диспетчера (по умолчанию, фрагменты кода хранятся в C:\Program Files\Microsoft Visual Studio 8\LANGUAGE\Snippets\1033\ ).

К примеру, фрагмент кода C# prop , который мы рассматривали в данной статье, обладает следующей разметкой (кое-что было вырезано для краткости):

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="...">
   <CodeSnippet Format="1.0.0">
      <Header>
         <Title>prop</Title>
         <Shortcut>prop</Shortcut>
         <Description>Code snippet for property...</Description>
         <Author>Microsoft Corporation</Author>
         <SnippetTypes>
            <SnippetType>Expansion</SnippetType>
         </SnippetTypes>
      </Header>
      <Snippet>
         <Declarations>
            ...
         </Declarations>
         <Code Language="csharp"><![CDATA[private $type$ $field$;

   public $type$ $property$
   {
      get { return $field$;}
      set { $field$ = value;}
   }
   $end$]]>
         </Code>
      </Snippet>
   </CodeSnippet>
</CodeSnippets>

Фрагмент содержит две основные части: <Header> и <Snippet>. В <Header> вы найдете мета-данные фрагмента, заголовок, ярлык, тип, описание и т.д. В <Snippet> необходима секция <Code>, которая содержит текст, внедряемый фрагментом. Опциональная секция <Declarations> используется для определения заменяемой секции во фрагменте. Заменяемые секции обозначены $name в секции <Code> и являются секциями, отображенными зеленым и настраиваемыми разработчиком при помощи фрагмента кода.


Импортирование чужих фрагментов кода

Поскольку фрагменты кода являются XML-файлами, вы с легкостью можете импортировать чужие фрагменты. Существует два способа импортирования:

  • Если у вас есть файл .snippet для импорта, просто зайдите в диспетчер фрагментов кода (Code Snippet Manager) и нажмите кнопку Import. Это откроет диалоговое окно, где вы сможете перейти к .snippet файлу на вашем жестком диске.
  • В качестве альтернативы вы можете можете установить фрагментыкода скачав файл Visual Studio Community Content Installer (.vsi). VSI файлы являются простыми ZIP файлами которые Visual Studio 2005 может открыть и автоматически установить.
Из диспетчера фрагментов вы можете нажать кнопку Search Online (Онлайн-поиск) для поиска доступных фрагментов кодав интернете.


Создание и добавление специализированных фрагментов кода

В то время как множество простых фрагментов кода может быть найдено на таких сайтах, как GotCodeSnippets.com, вам может понадобиться создать свои собственные фрагменты. Как мы уже обсуждали, это подразумевает создание соответственно сформатированного XML-файла с расширением .snippet, и затем импортирование (Import) фрагмента кода в Visual Studio.

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

public Type PropertyName
{
  get
  {
    object o = ViewState["PropertyName"];
    if (o == null)
      return Default_Value;
    else
      return (Type) o;
  }
  set
  {
    ViewState["PropertyName"] = value;
  }
}

В Visual Studio 2005 мы можем реализовать это при помощи фрагмента кода. Следующий фрагмент кода C# содержит полный код разметки. Для того чтобы импортировать это в вашу среду Visual Studio, просто скачайте файл .snippet в конце данной статьи и затем, из диспетчера фрагментов кода (Code Snippet Manager), нажмите Import и выберите файл фрагмента. Все очень просто! Затем вы можете использовать фрагмент кода в вашем специализированном серверном элементе управления путем ввода ярлыка (propvs) и нажатия клавиши Tab.

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
   <CodeSnippet Format="1.0.0">
      <Header>
         <Title>Property with ViewState Backing Store</Title>
         <Shortcut>propvs</Shortcut>
         <Description>Code snippet for property using ViewState as
                 its backing store.</Description>
         <Author>Scott Mitchell</Author>
         <SnippetTypes>
            <SnippetType>Expansion</SnippetType>
         </SnippetTypes>
      </Header>
      <Snippet>
         <Declarations>
            <Literal>
               <ID>type</ID>
               <ToolTip>Property type</ToolTip>
               <Default>int</Default>
            </Literal>
            <Literal>
               <ID>property</ID>
               <ToolTip>Property name</ToolTip>
               <Default>MyProperty</Default>
            </Literal>
            <Literal>
               <ID>field</ID>
               <ToolTip>The variable backing this property</ToolTip>
               <Default>myVar</Default>
            </Literal>
            <Literal>
               <ID>defaultValue</ID>
               <ToolTip>The default value for this property.</ToolTip>
               <Default>0</Default>
            </Literal>
         </Declarations>
         <Code Language="csharp"><![CDATA[
   public $type$ $property$
   {
      get
      {
         object o = ViewState("$property$");
         if (o == null)
            return $defaultValue$;
         else
            return ($type$) o;
      }     
      set
      {
         ViewState("$property$") = value;
      }
   }
   $end$]]>
         </Code>
      </Snippet>
   </CodeSnippet>
</CodeSnippets>

 

Создавайте фрагменты кода легким путем!
Если вы создаете фрагменты кода в Visual Basic и предпочитаете более легкий способ, то вы всегда можете воспользоваться бесплатным редактором фрагментов кода для Visual Basic 2005. Это приложение WinForms предоставляет интерфейс для управления и добавления фрагментов кода без необходимости написания XML-синтаксиса.

Вывод

В данной статье мы рассмотрели способ использования, управления, импортирования и создания фрагментов кода. Фрагменты кода являются изящной возможностью в Visual Studio 2005, которая объединяет в себе способности IntelliSense и автозаполнения в единой модели. Обладая такими фрагментами, вы можете создать обычные куски кода при помощи парочки кликов или нажатий клавиш! Вы, наверно, уже не можете обойтись без IntelliSense в Visual Studio; я уверен, что вы также добавите фрагменты кода  в список необходимых инструментов!

Scott Mitchell