zoukankan      html  css  js  c++  java
  • Visual Studio 中的Code Snippet(代码片段)功能介绍

    1、Code Snippet(代码片段)功能介绍

    平常我们在使用Visual Studio 进行开发时,可以看到Intellisense提示如下内容

    这种就是代码片段的提示。如输入cw后,按两次Tab键,即可输入Console.WriteLine();

    代码片段是小块可重用代码,可通过右键单击菜单(关联菜单)命令或热键组合插入到代码文件中。 

    2、Visual Studio 中预置的代码片段(C#)

    代码片段 功能 可用位置
    #if 创建 #if 指令和 #endif 指令。 任何位置。
    #region 创建 #region 指令和 #endregion 指令。 任何位置。
    ~ 创建包含类的终结期(析构函数)。 在类中。
    attribute 为派生自 Attribute 的类创建声明。 在命名空间(包括全局命名空间)、类或结构中。
    checked 创建 checked 块。 在方法、索引器、属性访问器或事件访问器内。
    class 创建类声明。 在命名空间(包括全局命名空间)、类或结构中。
    ctor 创建包含类的构造函数。 在类中。
    cw 创建对 WriteLine 的调用。 在方法、索引器、属性访问器或事件访问器内。
    do 创建 do while 循环。 在方法、索引器、属性访问器或事件访问器内。
    else 创建 else 块。 在方法、索引器、属性访问器或事件访问器内。
    enum 创建枚举声明。 在命名空间(包括全局命名空间)、类或结构中。
    equal 创建一个方法声明,该声明对 Object 类中定义的 Equals 方法进行重写。 在类或结构中。
    exception 为某个从异常(默认情况下为 Exception)派生的类创建声明。 在命名空间(包括全局命名空间)、类或结构中。
    for 创建 for 循环。 在方法、索引器、属性访问器或事件访问器内。
    foreach 创建 foreach 循环。 在方法、索引器、属性访问器或事件访问器内。
    forr 创建 for 循环,每次迭代后会减少循环变量。 在方法、索引器、属性访问器或事件访问器内。
    if 创建 if 块。 在方法、索引器、属性访问器或事件访问器内。
    indexer 创建索引器声明。 在类或结构中。
    interface 创建接口声明。 在命名空间(包括全局命名空间)、类或结构中。
    invoke 创建安全调用事件的块。 在方法、索引器、属性访问器或事件访问器内。
    iterator 创建迭代器。 在类或结构中。
    iterindex 使用嵌套类创建“已命名”迭代器和索引器对。 在类或结构中。
    lock 创建 lock 块。 在方法、索引器、属性访问器或事件访问器内。
    mbox 创建对 System.Windows.Forms.MessageBox.Show 的调用。 可能还需要添加对 System.Windows.Forms.dll 的引用 。 在方法、索引器、属性访问器或事件访问器内。
    namespace 创建命名空间声明。 在命名空间(包括全局命名空间)中。
    prop 创建自动实现的属性声明。 在类或结构中。
    propfull 创建具有 get 和 set 访问器的属性声明。 在类或结构中。
    propg 创建具有专用 set 访问器的只读自动实现的属性 在类或结构中。
    sim 创建 static int Main 方法声明。 在类或结构中。
    struct 创建结构声明。 在命名空间(包括全局命名空间)、类或结构中。
    svm 创建 static void Main 方法声明。 在类或结构中。
    switch 创建 switch 块。 在方法、索引器、属性访问器或事件访问器内。
    try 创建 try-catch 块。 在方法、索引器、属性访问器或事件访问器内。
    tryf 创建 try-finally 块。 在方法、索引器、属性访问器或事件访问器内。
    unchecked 创建 unchecked 块。 在方法、索引器、属性访问器或事件访问器内。
    unsafe 创建 unsafe 块。 在方法、索引器、属性访问器或事件访问器内。
    using 创建 using 指令。 在命名空间(包括全局命名空间)中。
    while 创建 while 循环。 在方法、索引器、属性访问器或事件访问器内。

    3、创建代码片段

    创建代码片段的基本格式如下:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
     3     <CodeSnippet Format="1.0.0">
     4         <Header>
     5             <Title></Title>
     6           <Shortcut></Shortcut>
     7           <Description></Description>
     8           <Author></Author>
     9         </Header>
    10         <Snippet>
    11             <Code Language="">
    12                 <![CDATA[]]>
    13             </Code>
    14         </Snippet>
    15     </CodeSnippet>
    16 </CodeSnippets>

    这里我们创建一个输入当前时间的代码片段,简写为 dt

    使用Visual Studio 创建一个XML文档,内容如下:

     1 <?xml version="1.0" encoding="utf-8"?>
     2  <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
     3      <CodeSnippet Format="1.0.0">
     4          <Header>
     5             <Title>dt</Title>
     6            <Shortcut>dt</Shortcut>
     7            <Description>DateTime.Now的代码片段</Description>
     8            <Author>zhaotianff</Author>
     9          </Header>
    10          <Snippet>
    11             <Declarations>
    12                 <Literal>
    13                     <ID>expression</ID>
    14                     <ToolTip>日期类型</ToolTip>
    15                     <Function>SimpleTypeName(global::System.DateTime)</Function>
    16                 </Literal>
    17                 <Literal>
    18                     <ID>dt</ID>
    19                     <ToolTip>变量名</ToolTip>
    20                     <Default>dt</Default>
    21                 </Literal>
    22             </Declarations>
    23             <Code Language="csharp"><![CDATA[var $dt$ = $expression$.Now;$end$]]>
    24             </Code>
    25         </Snippet>
    26      </CodeSnippet>
    27  </CodeSnippets>

    格式说明:

    Header:用于指定有关 IntelliSense 代码段的常规信息

    Title:代码段的友好名称

    Shortcut:快捷输入文本,这里用的是 dt

    Description:描述。这会显示在Visual Studio的提示上,在后面的截图可以看到

    Author:作者

    Snippet :指定代码片段的引用、导入、声明以及代码内容

    Declarations:声明字面量或对象

    Literal:定义可以编辑的代码段的文本(字面量)

    ID :指定字面量的唯一标识符(这个元素是必需的)

    Default :指定插入代码段时字面量的默认值(这个元素是必需的)

    Function :元素 指定当文本在 Visual Studio 中获得焦点时要执行的函数

    ToolTip :元素 用于描述文本的预期值和用法

    最关键的就是Code元素,在这里定义代码片段中的代码内容。

    Code元素有两个保留的关键字:$end$ $selected$

    $end$ 标记在插入代码段之后用于放置光标的位置。

    $selected$ 表示在文档中选择的要在调用时插入代码段的文本(如果定义了字面量,会直接选择字面量,当按下回车后,会跳到$selected$的位置)

    Code元素支持三种属性

    Language:用于标识当前的代码片段用于哪种编程语言,可选项(VB、CSharp、CPP、XAML、XML、JavaScrip、TypeScript、SQL、HTML)(这个选项是必需的)

    Kind:用于标识 代码片段可以用于哪个位置。(这个属性是可选的)

    method body(用于方法内部)、method decl (用于方法定义)、type decl (用于类型定义)、file (完整的代码定义,可用于任何位置)、any(任何位置)

    $:分隔符,可以描述字面量或对象

    示例代码说明

    在示例代码中定义了两个字面量

     1 <Literal>
     2     <ID>expression</ID>
     3     <ToolTip>日期类型</ToolTip>
     4     <Function>SimpleTypeName(global::System.DateTime)</Function>
     5 </Literal>
     6 <Literal>
     7      <ID>dt</ID>
     8      <ToolTip>变量名</ToolTip>
     9      <Default>dt</Default>
    10 </Literal>

    第一个使用了Function元素,代表这里会执行System.DateTime

    第二个是一个可选输入,使用了Default元素来标识默认值

    1 <Code Language="csharp"><![CDATA[var $dt$ = $expression$.Now;$end$]]>

    Code元素中,指定语言为CSharp,在<![CDATA[...]]>中输入代码片段 var $dt$ = $expression$.Now;$end$

    $dt$是前面定义的字面量,按下Tab键后,会自动选中该值

    $expression$是前面定义的字面量,代表System.DateTime

    $end$代表代码片段结束后,光标所在的位置 

    这里我们再对照VS内置的if代码片段来进行说明,定义如下:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
     3     <CodeSnippet Format="1.0.0">
     4         <Header>
     5             <Title>if</Title>
     6             <Shortcut>if</Shortcut>
     7             <Description>if 语句的代码片段</Description>
     8             <Author>Microsoft Corporation</Author>
     9             <SnippetTypes>
    10                 <SnippetType>Expansion</SnippetType>
    11                 <SnippetType>SurroundsWith</SnippetType>
    12             </SnippetTypes>
    13         </Header>
    14         <Snippet>
    15             <Declarations>
    16                 <Literal>
    17                     <ID>expression</ID>
    18                     <ToolTip>要计算的表达式</ToolTip>
    19                     <Default>true</Default>
    20                 </Literal>
    21             </Declarations>
    22             <Code Language="csharp"><![CDATA[if ($expression$)
    23     {
    24         $selected$ $end$
    25     }]]>
    26             </Code>
    27         </Snippet>
    28     </CodeSnippet>
    29 </CodeSnippets>

    当输入if代码片段后,可以看到如下:

    定义的字面量$expression$会被选中,修改后,按下回车,会跳到$selected$的位置。

    这里还有一个元素,在上面的介绍中没有涉及到。

    那就是Header元素下的SnippetType元素,该元素用于指定 Visual Studio 如何插入代码段。如果未指定,刚代表可以在任何位置插入。

    SnippetType元素可以重复使用。可选值如下:

    SurroundsWith允许将代码段放置在一段选定的代码周围。

    Expansion允许将代码段插入到光标处。

    Refactoring指定在 C# 重构过程中使用代码片段。 不能在自定义代码段中使用 Refactoring

    4、管理代码片段

    在工具菜单下,选择【代码片段管理器】项,可以打开代码片段管理器。

    在这里可以管理已有的代码片段,也可以添加新的代码片段。

    保存上面示例代码为dt.snippet文件

    打开代码片段管理,点击添加,选择刚刚保存的dt.snippet文件

    由于使用了 Language="csharp" 来标识 ,所以会自动放到CSharp类别下,并且会自动钩选 【My Code Snippets】文件夹。

    5、使用导入的代码片段

    输入 dt ,可以看到Visual Studio的提示。

    按两下Tab键,即可以快速输入

    1 var dt = DateTime.Now;
  • 相关阅读:
    以《淘宝网》为例,描绘质量属性的六个常见属性场景
    架构漫谈读后感
    软件体系架构课下作业01
    架构之美阅读笔记06
    架构之美阅读笔记05
    架构之美阅读笔记04
    架构之美阅读笔记03
    架构之美阅读笔记02
    架构之美阅读笔记01
    学习进度15
  • 原文地址:https://www.cnblogs.com/zhaotianff/p/13370909.html
Copyright © 2011-2022 走看看