热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

内容概要:什么是CodeSnippet?它能为我们带来什么?如何使用CodeSnippet?分析CodeSnippet文件【.snippet】编写一个实现属性更改通知

内容概要:

  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打开,下面给出代码:

 
  
   
   prop
   自动实现的属性的代码段
语言版本: C# 3.0 或更高版本

   Microsoft Corporation
   
    Expansion
   

  
  
   
    
     type
     属性类型
     int
    

    
     property
     属性名
     MyProperty
    

   

   
   

  

 

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

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

SnippetTypes,指定 Visual Studio 如何将代码段插入到代码中。SnippetTypes 元素中可能有零个或多个 SnippetType 元素。 如果 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,试试看,是不是成功了?


推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
author-avatar
云中之锦书
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有