Що таке Visual Studio.NET snippets? Частина 2, Різне, Програмування, статті

Це друга частина статті про сніппети. У першій давалося роз’яснення, що це за механізм, для чого він потрібен і як його застосовувати. У другій частині мова піде про те, як сніппети створювати.
Для прикладу візьмемо дуже просту узагальнену ситуацію: необхідність зберігати приховані тимчасові дані в тілі сторінки. Раніше для цього використовували приховані поля, але в asp.net є механізм ViewState. Я не буду торкатися теми використання ViewState, його впливу на продуктивність і розмір сторінки. Очевидно, що використовувати його потрібно акуратно. Так от, створимо сніппет для такої ось конструкції коду:

  public int ViewStatePropperty
  {
    get
    {
      object o = ViewState[“ViewStatePropperty”];
      return (o != null) ? (int)o : 0;
    }
    set
    {
      ViewState[“ViewStatePropperty”] = value;
    }
  }

Найпростіше властивість, значення якого буде зберігатися не в закритому поле, як зазвичай, а у ViewState. Зверніть увагу, що в цьому коді три змінних елементи: тип, ім’я і значення за замовчуванням. Причому рядок типу в коді використовується двічі, а рядок імені тричі. Тепер давайте визначимо, нарешті сніппет. Насправді сніппет – це певний особливим чином xml-файл і ось реалізація для нашого прикладу:

<?xml version=”1.0″ encoding=”utf-8″ ?>
<CodeSnippets xmlns=”http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet”>
  <CodeSnippet Format=”1.0.0″>
    <Header>
      <Title>propv</Title>
      <Shortcut>propv</Shortcut>
Простий приклад сниппета
Xaoc, для проекту Habrahabr
      <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>default</ID>
          <ToolTip>Default value</ToolTip>
          <Default>0</Default>
        </Literal>
      </Declarations>
      <Code Language=”csharp”><![CDATA[public $type$ $property$
{
  get
  {
    object o = ViewState[“$property$”];
    return (o != null) ? ($type$)o : $default$;
  }
  set
  {
    ViewState[“$property$”] = value;
  }
}$end$]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

Отже, що ж являє собою опис даного сниппета. Основні теги наступні: Header, який описує швидше зовнішню частину і Snippet, який описують логіку.

В Header визначаються теги зі значеннями: найменування сниппета, шорткати (ця назва за яким можна швидко викликати сніппет), описи, автора, і типу сниппета. Тип сниппета може мати три значення: SurroundsWith, Expansion і Refactoring. Перший вказує але те, що сніппет буде обертати виділений текст (так робить стандартний сніппет region), другий – на те, що текст сниппета просто вставити, а третій використовується для вбудованого в студію механізму рефакторинга і не може використовуватися в призначених для користувача сниппета.

В Snippet декларуються літерали, значення яких можна буде редагувати при використанні сниппета, і власне код сниппета. Зверніть увагу на те, як визначається літерал: зазначається його ідентифікатор, підказка і значення за замовчуванням. Ідентифікатор літерала потім використовується в тілі коду сниппета. Для виділення літерала, він укладається між двома знаками долара “$”. Тег Code містить окрім визначення коду сниппета ще й кілька атрибутів: Language, який вказує на мову перекладу сниппета і може приймати значення VB, CSharp, VJSharp, або XML; Delimiter, який дозволяє перевизначити знак долара на інший символ, і Kind, який дозволяє вказати сферу застосування сниппета і приймає значення “method body”, “method decl”, “type decl”, file, або any. У нашому випадку Kind опущений, але його можна вказати як “type decl”.

Після створення файлу сниппета його потрібно якось запровадити в студію. Для цього використовуємо стандартний діалог “Code Snippets Manager” в меню Tools головного меню сутдіі. Якщо його у вас там немає, то значить ваш enviroment так налаштований і пункт меню ви зможете відшукати в ToolsCustomize – Commands – Tools. Можна зробити простіше і викликати діалог шорткати ctrl + k, ctrl + b. У вікні можна вказати в який розділ зберегти сніппет і натиснувши кнопку import імпортувати ваш сніппет в студію. Після цього ви можете набрати propv в редакторі і натиснути tab. У вас повинен додатися текст на зразок цього:

public int MyProperty
{
  get
  {
    object o = ViewState[“MyProperty”];
    return (o != null) ? (int)o : 0;
  }
  set
  {
    ViewState[“MyProperty”] = value;
  }
}

На цьому все. Для повноти викладу дам посилання на опис схеми xml-файла сниппета:
хттп :/ / msdn.microsoft.com/ru-ru/library/ms171418 (en-us, vs.80). aspx (на жаль, через дужок в урл, Хабра невірно виділяє гіперлінк, скопіюйте його в браузер як є ). Там можна подчерпнуть додаткові знання і навчиться робити ще більш складні і корисні сніппети.

PS: “в статті немає помилок!” – На жаль стверджувати цього неможливо, але я буду радий, якщо ви звернете мою увагу на знайдену вами помилку.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*