Поделиться через


Фрагменты кода C#

В Visual Studio можно использовать фрагменты кода для добавления часто используемого кода в файлы кода C#. Фрагменты кода ускоряют, упрощают написание программ и делают этот процесс более надежным.

Фрагменты кода расширения добавляются в указанные точки вставки. Фрагменты кода в окружении добавляются вокруг выбранного кода и доступны только для C# и C++ . Инструкции по вставке или окружению кода фрагментами кода см . в разделе фрагменты кода.

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

Фрагменты кода работают так же, как в C# и C++, но набор фрагментов кода по умолчанию отличается. Следующие фрагменты кода C# включены в Visual Studio по умолчанию:

Имя или ярлык Description Допустимые расположения вставки
#if Создает директиву #if и директиву #endif . В любом месте.
#region Создает директиву #region и директиву #endregion . В любом месте.
~ Создает метод завершения (деструктор) для включающего класса. Внутри класса.
атрибут Создает объявление класса, производного от Attribute. Внутри пространства имен (включая глобальное пространство имен), класса или структуры.
включен Создает блок checked. Внутри метода, индексатора, метода доступа к свойству или событию.
class Создает объявление класса. Внутри пространства имен (включая глобальное пространство имен), класса или структуры.
ctor Создает конструктор для включающего класса. Внутри класса.
cw Создает вызов WriteLine. Внутри метода, индексатора, метода доступа к свойству или событию.
do Создает цикл выполнения. Внутри метода, индексатора, метода доступа к свойству или событию.
else Создает блок if-else. Внутри метода, индексатора, метода доступа к свойству или событию.
перечисление Создает объявление типа enum. Внутри пространства имен (включая глобальное пространство имен), класса или структуры.
равно Создает объявление метода, которое переопределяет метод Equals, определенный в классе Object. Внутри класса или структуры.
отрисовки Создает объявление класса, производного от исключения (по умолчанию Exception). Внутри пространства имен (включая глобальное пространство имен), класса или структуры.
для Создает цикл for. Внутри метода, индексатора, метода доступа к свойству или событию.
foreach Создает цикл foreach. Внутри метода, индексатора, метода доступа к свойству или событию.
forr Создает цикл for, уменьшающий переменную цикла после каждой итерации. Внутри метода, индексатора, метода доступа к свойству или событию.
if Создает блок if. Внутри метода, индексатора, метода доступа к свойству или событию.
Индексатор Создает объявление индексатора. Внутри класса или структуры.
интерфейс Создает объявление interface. Внутри пространства имен (включая глобальное пространство имен), класса или структуры.
invoke Создает блок, который безопасно вызывает событие. Внутри метода, индексатора, метода доступа к свойству или событию.
iterator Создает итератор. Внутри класса или структуры.
iterindex named Создает итератор и пару индексатора с помощью вложенного класса. Внутри класса или структуры.
lock Создает блок lock. Внутри метода, индексатора, метода доступа к свойству или событию.
mbox Создает вызов System.Windows.Forms.MessageBox.Show. Может потребоваться добавить ссылку на System.Windows.Forms.dll. Внутри метода, индексатора, метода доступа к свойству или событию.
пространство имен Создает объявление namespace. Внутри пространства имен, включая глобальное пространство имен.
prop Создает объявление свойства autoimmented. Внутри класса или структуры.
propfull Создает объявление свойства с методами доступа get и set. Внутри класса или структуры.
propg Создает свойство autoimplemented только для чтения с частным set методом доступа. Внутри класса или структуры.
sim Создает объявление метода static int Main. Внутри класса или структуры.
struct Создает объявление struct. Внутри пространства имен (включая глобальное пространство имен), класса или структуры.
svm Создает объявление метода static int Main. Внутри класса или структуры.
switch Создает блок switch. Внутри метода, индексатора, метода доступа к свойству или событию.
try Создает блок try-catch. Внутри метода, индексатора, метода доступа к свойству или событию.
tryf Создает блок try-finally. Внутри метода, индексатора, метода доступа к свойству или событию.
не включен Создает блок unchecked. Внутри метода, индексатора, метода доступа к свойству или событию.
unsafe Создает блок unsafe. Внутри метода, индексатора, метода доступа к свойству или событию.
using Создает директиву using. Внутри пространства имен, включая глобальное пространство имен.
while Создает цикл while. Внутри метода, индексатора, метода доступа к свойству или событию.

Функции фрагмента кода C#

Функции указываются в элементе Function фрагмента кода. В следующей таблице описаны три функции, доступные для использования с элементом Function в фрагментах кода C#.

Function Description
GenerateSwitchCases(EnumerationLiteral) Формирует оператор switch и набор операторов case для членов перечисления, заданных параметром EnumerationLiteral. Параметр EnumerationLiteral должен быть ссылкой на литерал перечисления или тип перечисления.
ClassName() Возвращает имя класса, содержащего вставленный фрагмент кода.
SimpleTypeName(TypeName) TypeName Сокращает параметр до самой простой формы в контексте, в котором был вызван фрагмент кода.

Пример GenerateSwitchCases

Ниже представлен пример использования функции GenerateSwitchCases. При вставке этого фрагмента и вводе перечисления в $switch_on$ литерал литерал $cases$ создает case оператор для каждого значения перечисления.

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>switch</Title>
            <Shortcut>switch</Shortcut>
            <Description>Code snippet for switch statement</Description>
            <Author>Microsoft Corporation</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>expression</ID>
                    <ToolTip>Expression to switch on</ToolTip>
                    <Default>switch_on</Default>
                </Literal>
                <Literal Editable="false">
                    <ID>cases</ID>
                    <Function>GenerateSwitchCases($expression$)</Function>
                    <Default>default:</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[
                    switch ($expression$)
                    {
                        $cases$
                    }
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

Пример ClassName

Ниже представлен пример использования функции ClassName. При вставке этого фрагмента $classname$ литерал заменяется именем заключенного класса в этом расположении в файле кода.

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Common constructor pattern</Title>
            <Shortcut>ctor</Shortcut>
            <Description>Code Snippet for a constructor</Description>
            <Author>Microsoft Corporation</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal>
                    <ID>type</ID>
                    <Default>int</Default>
                </Literal>
                <Literal>
                    <ID>name</ID>
                    <Default>field</Default>
                </Literal>
                <Literal default="true" Editable="false">
                    <ID>classname</ID>
                    <ToolTip>Class name</ToolTip>
                    <Function>ClassName()</Function>
                    <Default>ClassNamePlaceholder</Default>
                </Literal>
            </Declarations>
            <Code Language="csharp" Format="CData">
                <![CDATA[
                    public $classname$ ($type$ $name$)
                    {
                        this._$name$ = $name$;
                    }
                    private $type$ _$name$;
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

Пример SimpleTypeName

Этот пример показывает, как использовать функцию SimpleTypeName. При вставке этого фрагмента в файл $SystemConsole$ кода литерал заменяется простейшей формой Console типа в контексте, в котором вы вызвали фрагмент кода.

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Console_WriteLine</Title>
            <Shortcut>cw</Shortcut>
            <Description>Code snippet for Console.WriteLine</Description>
            <Author>Microsoft Corporation</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
        </Header>
        <Snippet>
            <Declarations>
                <Literal Editable="false">
                    <ID>SystemConsole</ID>
                    <Function>SimpleTypeName(global::System.Console)</Function>
                </Literal>
            </Declarations>
            <Code Language="csharp">
                <![CDATA[
                    $SystemConsole$.WriteLine();
                ]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>