C++ Programmer's Cookbook

{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}

VS2005中用Code Snippets提高开发效率

 在VS.NET 2005中,新增加了许多新的特性和功能。其中在方便用户编程方面有了很大的改进,比如新增加了code snippets(代码片断助手)功能。所谓的code snippets,是用户可以在编程过程中,将经常要用到的一些常用代码或者值得收藏起来的代码保存起来,在要使用的时候就可以方便地调用出来。本文将介绍如何将vs.net 2005自带的code snippets加到已有的应用程序中去,以及如何建立自己的snipeets,如何使用开源的snippet editor。

  首先我们来看下如何往已有的程序中插入code snippet。在vs.net 2005中,已经预先设置了很多平时我们会用到的code snippets了,比如for loops语句,又或者调用sqlcommand对象的executeReader方法等代码片段,要用到的时候,只需要调用这些code snippets就可以很方便的操作。

  要在现有的代码中插入code snippets,在要插入的位置,右键弹出的菜单中,选择"insert snippet"或者同时按下CTRL+K+X组合键。这时会在当前光标位置弹出系统的snippet供用户选择,如果要取消返回代码状态,则只需要按 ESC键就可以取消了。

  Snipptets会根据你所使用的语言而有所不同而显示不同的格式,如果你使用的是VB.net,则snippets会以图1的方式显示,如果使用的是c#,则以图2的方式显示,如果当前编辑的是xml,则以图3的方式显示。


图1

图2

图3

  下面我们来具体看一个例子,假设你要为一个类添加属性,一般来说你要输入一大段代码,比如还要添加getter/setter方法。如果用 snippets的话,将会十分方便。首先,我们在要增加属性的代码中,如果使用的是c#,按上文说的方法,右键弹出菜单中选择"insert snippets",然后再选择"visual c#",再在弹出的菜单中选择"prop"(property的缩写),又或者直接输入prop,再按tab键,则可以自动生成一个添加属性的普通代码,包括了getter/setter方法,当然你还要改参数的名称,如下代码所示:

private int myVar;
public int MyProperty
{
 get { return myVar; }
 set { myVar = value; }
}

  要注意的是,在上面的代码中,比如要修改myVar为另外的参数名,只需要点选myVar这个参数,此时参数会被一个绿色的小方框包住,当你修改为自己的参数后,只需要按回车键,则下文中所有的相关参数都会被同时修改。

  如果使用的是vb.net,则也有两种方法实现。可以在要插入的位置选insert snippets,再选择"common code patterns",在弹出的菜单中继续选择" Properties and Procedures",最后选择"Define a Property",则会自动生成添加属性的普通代码;如果要简单快捷的话,则可以输入property,并按TAB键,则同样可以实现,生成的代码如下所示:

Private newPropertyValue As Integer
Public Property NewProperty() As Integer
Get
 Return newPropertyValue
End Get
Set(ByVal value As Integer)
 newPropertyValue = value
End Set
End Property

  值得一题的是,c#和xml snippets都有一个额外的功能叫"Surround with",就是说可以将已经存在的一段代码放到snippets助手中去,比如有下面的代码:

string[] arr = new string[4] {"This","is","a","test"};
string DisplayString=string.Empty;
DisplayString += arr[0];
MessageBox.Show(DisplayString);

  假如你想增加一个循环语句,来实现字符串的相加,那么可以先用鼠标选择DisplayString += arr[0];,然后在右键弹出的菜单中选择"surround with",再在弹出的菜单中选择"for",则系统会自动添加如下所示的语句:

for (int i = 0; i < length; i++)
{
 DisplayString += arr[0];
}

  接下来我们谈下如何管理这些代码snippets。在vs.net 2005中,使用code snippets manager管理器来管理这些snippets,code snippets manager在tools工具菜单下可以找到,如下图:

  对于vb.net,visual c#,Visual j#,xml,snippets管理器都分类列出了有哪些代码助手,点选每一个代码片断,同时列出了其存放的位置。还提供了增加,删除,导入,在线查询代码助手的功能。
最后,我们看下如何自定义snippets。首先研究下snippets的结构,以上文提到的属性snippets为例子,我们先在snippets 管理器中,找到prop这个snippets,然后记下其所在的路径,然后再用编辑工具打开这个文件,可以看到如下的代码,注意是以xml格式组织的。

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>prop</Title>
<Shortcut>prop</Shortcut>
<Description>Code snippet for property and backing field</Description>
<Author>Microsoft Corporation</Author>
<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>field</ID>
<ToolTip>The variable backing this property</ToolTip>
<Default>myVar</Default>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[private $type$ $field$;

public $type$ $property$
{
 get { return $field$;}
 set { $field$ = value;}
}
$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>

  在上面的代码中,其中的header部分简单描述了关于这个snippets的信息,如名称,快捷方式,作者,备注等。在<snippets>节点下,则逐个定义了在snippets中出现的属性,其中<default>指出了该属性默认的值。而在关键部分<code>,用<![CDATA]>的方式定义了snippets的基础架构,其中用$参数名的方式定义每个属性,十分简单。

  如果要创建自己的snippets,是十分简单的,最简单的是使用比如记事本等编辑工具,新建一个后缀为snippet的 XML文件,仿照上面的格式就可以设计了。当完成后,可以在snippets管理器中通过导入完成的snippet就可以增加一个新的snippet了。此外,还可以到http://msdn.microsoft.com/vbasic/downloads/tools/snippeteditor/去下载一个snippet 编辑器,可以方便地进行编辑snippet。

  在启动这个snippets编辑器后,默认使用的是vb.net,如下图所示。如果想查看已经存在的snippets,可以先在鼠标右键弹出的菜单中选择"add path",然后添加vb.net的snippets所在的路径(默认是vs.net 2005安装目录下\VB\Snippets子目录中),则可以很方便地查看已经存在的snippets的代码了。如果想查找已有的snippets,则可以在左上角的文本框中输入要搜索的内容,再按绿色的apply按钮就可以查找了。

  假如要创建自己的snippets时,可以首先在左则已有的目录下增加一个snippets,比如现在要创建一个叫InstanceProperty的 snippets,可在common code patterns分类下的proerties and procedures子类添加,将其命名为InstanceProperty。

  接着,在右边的编辑窗口中,可以按照snippets的规则写入如下的代码:

Private $PrivateVariable$ As $PropertyType$
Public Property $PropertyName$() As $PropertyType$
Get
 If $PrivateVariable$ Is Nothing Then
  $PrivateVariable$ = New $PropertyType$
 End If
 Return $PrivateVariable$
End Get
Set(ByVal value As $PropertyType$)
 $PrivateVariable$ = value
End Set
End Property

  写完后,可以点选priview选项卡,来进行效果的预览。而在下方的replacement选项卡中,是用来进行参数默认的设置的,当设置默认值后,只要用户一调用该codesnippet,则对应的参数转换为该默认值,比如要将PrivateVariable的默认值设置为abc, PropertyType的值可以默认设置为User自定义类型,PropertyName设置为setUser,则将上述snipeet保存后,下次调用snippet时,会转换为以下代码:

Private abc As User
Public Property setUser() As User
Get
 If abc Is Nothing Then
  abc = New User
 End If
Return abc
End Get
Set(ByVal value As String)
 abc = value
End Set
End Property

  小结

  本文简单介绍了在vs.net 2005中,如何使用code snippets代码助手简化编程,用户可以根据自己的需要,加入更多自定义的代码助手功能,这将大大提高工作效率。

:http://www.7dspace.com/doc/24/0603/200632121214937175_2.htm

posted on 2006-04-20 19:26 梦在天涯 阅读(1409) 评论(1)  编辑 收藏 引用 所属分类: C#/.NET

评论

# re: VS2005中用Code Snippets提高开发效率 2006-04-20 19:40 梦在天涯

想起这个题目,不得不由衷地佩服MS的细心度,我们想到了没有想到的他都给我们想到了。让我们尽可能的解放coding之苦。

  程序员,不得不在thinking 和coding之间进行痛苦的折磨,然而coding占去了我们的大量宝贵的时间。我们重复重复又重复着那些一辈子都不会忘掉的代码,重复重复又重复的重复着那些被我们敲烂的代码。

  发现这个还是一次偶然的机会,我自定义了一个Prop函数,结果在按下去的时候不小心碰到了Tab键结果出现了以下的代码:

private int myVar; public int MyProperty { get { return myVar;} set { myVar = value;} }

  熟悉的朋友应当已经发现这是一个标准的设置属性的字段。为什么我输入了Prop会自出来这些呢?带着疑问找到了google大法,原来已经早就有人发现了:这是2005的一个特色之一:代码段。

  代码段是提供了将现成的代码段插入到项目中的方法。它可以方便的把我们常用的一些代码用"快捷键"的方式让我们迅速的输入到IDE中。这里我不知道怎么形容,暂且用快捷键来代替吧。

  具体的输入方法:例如:我们输入Prop然后回车,接着按着Tab几秒钟,IDE就会自动给我们添加上去代码段所定义的代码。而且支持可修改部分,我们可以方便的接着使用Tab来穿梭于各个可修改部分。

  有人会有疑问,这些代码段怎么来的呢?IDE已经给我们自带了一部分,我们也可以根据自己的偏好来进行自行创建。

  打开VS2005的 \VC#\Snippets\2052\Visual C# 目录,我们会发现有一些以.snippet结尾的文件,这些就是系统给我们默认定义好的代码段。我们用文本文档打开,不难发现其实就是标准的XML文件。现对照if代码段进行一些讲解(对应文件为if.snippet)。看起代码:

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"
<CodeSnippet Format="1.0.0">//以上是代码段的一个标准格式 <Header>
<Title>if</Title>
//代码段的说明部分,指定代码段的标题。可以显示在代码段插入和代码段管理器的代码段说明部分。
<Shortcut>if</Shortcut>
//代码段的快捷方式。就是输入后按着Tab自动产生代码
<Description>if 语句的代码段</Description>
//指定代码段内容的说明信息,它可以给我们在使用代码段的时候提供工具提示,并且可以在代码段管理器中提供说明
<Author>Microsoft Corporation</Author>
//版权信息
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
//以上部分指定vs如何插入代码段。SurroundsWith允许代码段放置在选定代码快的周围,而Expansion的值允许将代码段插入光标所在的位置。
</Header>
<Snippet>
//此处开始指定代码的引用、导入、声明代码。主体部分
<Declarations>
//指定当前作为代码段组成部分的文本和对象,对代码段可以编辑部分。
<Literal>//<Literal> 段定义可编辑的代码段的文本。他用与标识对代码快的替换。我们可以使用Tab来进行切换修改。可以按照函数的概念来理解。这里就是我们传递参数值
<ID>expression</ID>
//替代标识
<ToolTip>要计算的表达式</ToolTip>//提示文本
<Default>true</Default>//默认值
</Literal>//若需多个,则可重复<Literal>代码段。
</Declarations>
<Code Language="csharp">
<![CDATA[if ($expression$) { $selected$ $end$ }]]>
</Code>//看code部分代码段。这里就是我们的核心部分。其中Language可以指定我们在用什么语言开发的时候使用此类代码段。
<! [CDATA[部分就是我们标准的C#语法了。if ($expression$)看清楚if()括号部分的代码,这里就是使用到我们在<Literal>部分定义的替代标识了。以$开始和结束,由于我们在定义的时候制定了默认值为true,所以在使用代码段的时候等价于if(true)。而括弧部分就是主体$selected$表示此处可以被选择,$ end$表示代码段结束。
</Snippet>
</CodeSnippet>
</CodeSnippets>

  看,通过上边的分析,代码段是不是很简单。我们在对照一下核心部分代码:

  代码段部分代码:

if ($expression$) { $selected$ $end$ }

  正常语句代码:

if (条件) { 代码 }

  了解了这些知识,那么我们该如何创建自己的代码段呢。最简单的方法就是用记事本,当然要十分熟悉这些语句。另外IDE也给我们提供了创建文件的方法。

  [文件]→[新建文件] →[XML文件],重新命名为:mytest. Snippet,一定要以snippet结尾,否则以后没有办法使用此代码段。参照上边的讲解,相信大家不难以葫芦画瓢来创建自己的代码段。

  建立好了,我们该怎么使用呢?[工具]→[代码段管理器] →[导入]即可。代码段管理器可以方便的浏览现有的代码段。我们也可以把自己做好的代码段共享给别人,只要别人通过代码段管理器就可以导入制订好的代码段。很方便。

  另外我们还可以创建VSI安装文件来进行安装使用。相信大部分人对VSI安装文件都有所了解了,熟悉的初学者开发工具包就是利用VSI文件发布的。具体的方法请看我的后续文章。用好2005之创建安装程序 (.vsi)

  通过以上介绍,相信大家会对代码段有一个很清楚的了解。我们可以通过"代码段管理器"方便的浏览已经存在的代码段以及它们的含义。

  代码段是预编写的代码片段,您可以随时使用 Visual Studio 2005 将这些代码片段插入到您的应用程序中。这些代码段减少了键入重复代码或搜索示例所用的时间,从而提高了工作效率。

  我们的口号是:只做对的,不做慢的。欢迎大家进行交流。

  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

EMail:itech001#126.com

导航

统计

  • 随笔 - 461
  • 文章 - 4
  • 评论 - 746
  • 引用 - 0

常用链接

随笔分类

随笔档案

收藏夹

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

积分与排名

  • 积分 - 1748832
  • 排名 - 5

最新评论

阅读排行榜