• VS2010中CodeSnippet【代码段】应用与创建


    内容概要:

    1. 什么是Code Snippet?它能为我们带来什么?
    2. 如何使用Code Snippet?
    3. 分析Code Snippet文件【.snippet】
    4. 编写一个实现属性更改通知的Code Snippet

    什么是Code Snippet?它能为我们带来什么?

    Code Snippet是预编写的代码片段,您可以随时使用 Visual Studio 将这些代码片段插入到您的应用程序中。这些代码段减少了键入重复代码或搜索示例所用的时间,从而提高了工作效率。可以使用代码段 XML 架构创建自己的 Visual Basic、Visual C# 或 XML 代码段,并将它们添加到 Visual Studio 已包含的代码段中。【来自MSDN】

    如何使用Code Snippet?

    1. 首先 ,新建一个控制台应用程序“CodeSnippetExample”
    2. 在Program类内部,Main方法外部敲入“prop”(property,“属性”的缩写)
    3. 在输入完“prop”后,按下“tab”键,你就会发现代码变成了这个样子:

      其中,浅蓝色背景标识着我们正在修改的代码,可以通过按“tab”键来更改修改光标,如果这时按下“tab”键,代码就会变成下面的样子,这样就可以修改“MyProperty”了。
    4. 现在,我们将属性的类型修改为“String”,属性名改为“NewProperty”。
    5. 然后,键入回车键,退出代码段模式,这样,一个简写的属性就完成了。

    这个只是一个简单的例子,同样的,你还可以使用propfull来实现具有字段的属性,比如下面的:

    到现在,可以很明显的看出,如果我们能很好的利用CodeSnippet的话,编写代码的速度将会有很大的提升,比如,我会使用CodeSnippet来帮我编写通知属性,从而少去了大量手工代码的编写:

    在VS中内置了很多现成的CodeSnippet模板,可以通过VS-工具-代码段管理器来查看这些CodeSnippet。

    分析Code Snippet文件【.snippet】

    在代码段管理器中,把“语言”选项调整为“Visual C#”,展开下面的Visual C#节点,就会看到下面的东西:

    下面,把“位置”下面的地址复制到“资源管理器”的地址栏,按回车,并且找到“prop.snippet”,双击它,默认会被VS打开,下面给出代码:

     <CodeSnippet Format="1.0.0">
      <Header>
       <Title>prop</Title>
       <Shortcut>prop</Shortcut>
       <Description>自动实现的属性的代码段
    语言版本: C# 3.0 或更高版本</Description>
       <Author>Microsoft Corporation</Author>
       <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
       </SnippetTypes>
      </Header>
      <Snippet>
       <Declarations>
        <Literal>
         <ID>type</ID>
         <ToolTip>属性类型</ToolTip>
         <Default>int</Default>
        </Literal>
        <Literal>
         <ID>property</ID>
         <ToolTip>属性名</ToolTip>
         <Default>MyProperty</Default>
        </Literal>
       </Declarations>
       <Code Language="csharp"><![CDATA[public $type$ $property$ { get; set; }$end$]]>
       </Code>
      </Snippet>
     </CodeSnippet>
    </CodeSnippets>

    很明显的,这是一个XML格式的文件,其根节点CodeSnippets下有一个CodeSnippet节点,代表一个CodeSnippet代码段。在CodeSnippet节点下面,有两个节点,Header和Snippet。

    先分析Header。在Header下有下面几个标签:Title,Shortcut,Description,Author,SnippetTypes。前4个标签都很好理解,分别是:标题,快捷命令,描述,作者。难理解的是最后一个:SnippetTypes。

    SnippetTypes,指定 Visual Studio 如何将代码段插入到代码中。SnippetTypes 元素中可能有零个或多个 SnippetType 元素。 <?XML:NAMESPACE PREFIX = [default] http://msdn2.microsoft.com/mtps NS = "http://msdn2.microsoft.com/mtps" /?> 如果 SnippetTypes 元素不存在,则代码段可以插入到代码中的任何位置。 其子节点只能为SnippetType,且SnippetType只能有两种值:SurroundsWith(允许将此代码段放置在一段选定的代码周围)、Expansion(允许将代码段插入到光标处。 )。这个不是很理解。。。

    下面,开始分析Snippet。在Snippet下面有两个标签Declarations(声明),Code。

    Declarations:指定构成代码段可编辑部分的文本和对象。

    在Declarations标签内部的Literal定义代码段的可编辑文本。Literal元素用于标识完全包含在代码段中的代码片段替换,不过这些代码片段在插入到代码中后,可能需要进行自定义。 例如,字符串、数值和一些变量名都应声明为文本。(这个是MSDN中的解释,说白了就是定义我们在使用CodeSnippet时可以编辑的几个部分,想象成模板替换符也可以)

    在Literal标签下,有三个标签,ID(必选的,用于模板替换时的标识符),ToolTip(可选的,提示文本),Default(必选的,指定插入代码段时文本的默认值。也就是模板替换符的默认值)。

    结束了”定义部分“,我们就要组织模板了。开始分析Code标签。

    Code标签中的内容很简单,使用XML属性标识了使用的语言是csharp,其内部的数据标签,就是一个代码模板,这里便用上了上面定义的Declarations,用法很简单,在ID前后加$符号就可以。

    【PS】分析的不好,大家见谅。。。

    编写一个实现属性更改通知的Code Snippet

    在WPF程序中,有很多程序员乐于使用MVVM模式,于是,在写ViewMode时,编写具体有通知功能的属性就成了这部分程序员必须做的事情,他们写出的代码大概就是这样:

        public class ViewModel : NotificationObject
        {
            private String userName;
            public String UserName
            {
                get { return userName; }
                set { userName = value; this.RaisePropertyChanged("UserName"); }
            }
        }

    仔细观察,发现这段代码中声明UserName属性的代码,其代码和使用propfull生成的代码很相似,只不过是在set访问器中多了一句this.RaisePropertyChanged("UserName"); 而已。现在,开始让代码简化起来。。。

    首先,找到propfull的CodeSnippet文件,复制到桌面。:C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\2052\Visual C#\propfull.snippet

    修改Title,Shortcut,Description。。。。propNotification,propno,具有通知功能的属性。

    接着,在Code标签中找到set访问器的代码,在其原有语句的分号后面加上这句话:“this.RaisePropertyChanged("$property$");”。

    这样,一个实现通知同能属性的CodeSnippet就写好了。然后把这个文件保存,重命名为propn.snippet 复制到C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\2052\Visual C#\目录,重启VS,试试看,是不是成功了?

  • 相关阅读:
    【WPF】代码触发Button点击事件
    [WPF]静态资源(StaticResource)和动态资源(DynamicResource)
    stm32f103_arduino
    解除github下载的文件的锁定
    c# wpf binding
    mysql 使用可能遇到的问题
    c# progressbar
    STM32串口IAP(YModem) (转载)
    VS2017、VS2019安装包制作(转)
    八、ES集群搭建
  • 原文地址:https://www.cnblogs.com/Soar1991/p/2418748.html
Copyright © 2020-2023  润新知