1.前言
开发人员不喜欢打字。如果你希望提高开发人员的生产力,减少键入的数量,这也同时减少打字稿的数量以及因此产生的编译器错误,这些都极大分散了开发人员的注意力。代码重用是开发人员收集代码的另一个原因。即使单个应用程序也会大量地由小而公共的代码段组成,在几乎每个程序中都会有相同的代码元素:循环、类、异常处理等等。开发人员传统上是对代码进行剪切和粘贴以避免重复键入。但是这具有相当的局限性,包括有限的持久性,应该有更可行的解决方案。
这个解决方案就是在Visual Studio 2005中引入的代码段技术。代码段是可重用的源代码的容器。一个代码段是代码的一个别名。插入一个代码段就是在光标处或选中的地方将它所代表的代码插入到源文件中。代码段提高了开发人员的效率和准确性。
2.初识代码段
(1).什么是代码段?
将一段代码行提取出来,可以多次重复的使用。VS IDE提供对代码段的完整支持、使代码编写更快、更容易、更可靠。
一个代码段的例子
(2).系统默认代码段
对于开发人员的例行任务,Visual Studio 2005有默认代码段。默认代码段是代码扩展和外侧代码的混合。默认代码段出现在IntelliSense完成列表和代码选择器中。表1列出了一些默认代码段。
表1 默认代码段
代码段名
|
描 述
|
#if
|
该代码段用#if和#endif命令围绕代码
|
#region
|
该代码段用#region和#endregion命令围绕代码
|
~
|
该代码段插入一个析构函数
|
attribute
|
该代码段插入一个定制属性的声明,该定制属性是从System.Attribute派生的一个类
|
checked
|
该代码段用一个checked块围绕代码
|
class
|
该代码段插入一个类声明
|
ctor
|
该代码段插入一个构造函数
|
cw
|
该代码段插入一个Console.WriteLine语句
|
do
|
该代码段用一个do while块围绕代码
|
else
|
该代码段插入一个else块
|
enum
|
该代码段插入一个enum声明
|
equals
|
该代码段重写从System.Object类型继承的Equals方法
|
exception
|
该代码段插入一个应用程序异常的声明,该异常派生自System.Exception
|
for
|
该代码段用一个for循环围绕代码
|
foreach
|
该代码段用一个foreach循环围绕代码
|
forr
|
该代码段用一个decrementing for循环围绕代码
|
if
|
该代码段用一个if块围绕代码
|
indexer
|
该代码段插入一个索引器函数
|
interface
|
该代码段插入一个接口声明
|
iterator
|
该代码段插入一个迭代器
|
interindex
|
该代码段插入一个命名的迭代器和索引器
|
invoke
|
该代码段插入并调用一个事件
|
lock
|
该代码段用一个lock块围绕代码
|
mbox
|
该代码段插入MessageBox.Show语句
|
namespace
|
该代码段用一个namespace围绕代码
|
Prop
|
该代码段插入一个属性和后备字段
|
propg
|
该代码段插入一个只读属性。只读属性只有一个get方法
|
Sim
|
该代码段插入一个返回一个整数的静态入口方法
|
struct
|
该代码段插入一个struct声明
|
Svm
|
该代码段插入一个返回为void的静态入口方法
|
switch
|
该代码段插入一个switch语句
|
Try
|
该代码段插入一个try-catch块
|
Tryf
|
该代码段插入一个try-finally块
|
unchecked
|
该代码段用一个unchecked块围绕代码
|
unsafe
|
该代码段插入一个unsafe块
|
using
|
该代码段用一个using块围绕代码
|
while
|
该代码段用一个while循环围绕代码
|
(3).代码段管理器
用代码段管理器来管理代码段,包括添加、移除、导入和搜索代码段。
代码段管理器可以在“工具”菜单里打开(见图4.33)。在代码段管理器里显示的文件夹是代码段目录,打开一个文件夹来查看一个代码段。对于每个代码段提供了以下信息:
“代码段管理器”对话框
l 代码段描述
l 代码段的别名或快捷方式
l 代码段类型
l 代码段的作者
对话框里的“添加”按钮向代码段目录列表添加另一个目录。一个代码段目录包含代码段文件,这是带有.snippet后缀的XML文件。对于C#,默认的代码段目录是My Code Snippets,Refactoring和Visual C#。“移除”按钮从列表中移除一个代码段目录。“导入”按钮导入一个代码段文件。用“联机搜索”按钮来浏览代码段,这个按钮打开一个通用搜索窗口,开发人员可以通过它搜索代码段。找到正在搜索的代码段后,就可以将其下载到本地机器。
下载网上所找到的代码段可能会引起安全问题,代码段无法保证所有的XML都是无害的。此外,代码段也可能隐藏有恶意脚本,在代码段中定义的“帮助URL”元素可能会暗地里运行一个脚本。还有,代码段可能会不加任何提示地添加引用,在引用中可能会对函数进行恶意调用。长代码段可能会隐含有害代码。在下载涉及数据库和代码访问安全、基于角色的安全或验证代码的时候要小心。较好的办法是在应用程序使用代码段之前,先仔细检查下载的代码段的源代码。
3.解密代码段
(1).如何定义代码段
<CodeSnippets
xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>
My Snippet
</Title>
</Header>
<Snippet>
<Code Language="CSharp">
<![CDATA[MessageBox.Show("Hello World");]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
对于这段XML的解释
• Header 包含以下子元素:
– Author : 指定代码段的作者姓名。
– Description : 指定有关IntelliSense 代码段内容的描述信息。
– HelpUrl : 指定提供有关代码段的更多信息的URL。
– Keywords : 为代码段指定自定义关键字。
– Shortcut : 指定用于插入代码段的快捷方式文本。
– SnippetTypes : 指定Visual Studio 插入代码段的方式。
– Title : 指定代码段的标题。
• Snippet 包含以下子元素:
– Code : 提供用于容纳IntelliSense 代码段的短代码块的容器。
– Declarations : 指定构成代码段可编辑部分的文本和对象。
– Imports : 指定IntelliSense 代码段使用的导入命名空间。
– References : 指定有关代码段所需的程序集引用的信息。
• SnippetTypes : 指定Visual Studio 插入代码段的方式。
– SurroundsWith:允许将此代码段放置在一段选定的代码周围。
– Expansion:允许将代码段插入到光标处。
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
• Code : 提供用于容纳IntelliSense 代码段的短代码块的容器。
属性如下:
– Language:代码语言(必选)
– Kind : 指定代码段所包含的代码类型,并据此指定可以插入代码段
的位置。可用的值有method body、method decl、type decl、
page、file 和any
• Declarations : 指定构成代码段可编辑部分的文本和对象。
包含以下子元素:
– Literal:定义代码段的可编辑文本。
– Object:定义代码段的可编辑对象。
如:
<Snippet>
<Declarations>
<Literal>
<ID>SQL</ID>
<ToolTip>Replace with a SQL connection string.</ToolTip>
<Default>"SQL connection string"</Default>
</Literal>
<Object>
<ID>Connection</ID>
<Type>System.Data.SqlClient.SqlConnection</Type>
<ToolTip>Replace with a connection object in your application.</ToolTip>
<Default>dcConnection</Default>
</Object>
</Declarations>
</Snippet>
4.使用代码段
• 如何使用代码段?
– 通过键盘快捷键
• Ctrl+K、Ctrl+X
• Ctrl+K、Ctrl+S (外侧代码段)
– 通过IntelliSense 自动完成使用代码段
• 键入快捷方式,键入两次Tab 以调用代码段
– 通过“编辑”菜单使用代码段
• 从“编辑”菜单中选择“IntelliSense”,然后选择“插入代码段”命
令
– 通过上下文菜单使用代码段
• 右击光标,然后从上下文菜单中选择“插入代码段”命令