代码段(Code Snippets)
• 什么是代码段?
– 将一段代码行提取出来,可以多次重复使用。VS IDE
提供对代码段的完整支持、使代码编写更快、更容易、
更可靠
• 一个代码段的例子:
for (int i = 0; i < 10; i++)
{
}
XML文件
(for.snippet)
代码段(Code Snippets)
• 如何定义代码段?
<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>
代码段(Code Snippets)
• Header 包含以下子元素:
– Author : 指定代码段的作者姓名。
– Description : 指定有关IntelliSense 代码段内容的描述信息。
– HelpUrl : 指定提供有关代码段的更多信息的URL。
– Keywords : 为代码段指定自定义关键字。
– Shortcut : 指定用于插入代码段的快捷方式文本。
– SnippetTypes : 指定Visual Studio 插入代码段的方式。
– Title : 指定代码段的标题。
• Snippet 包含以下子元素:
– Code : 提供用于容纳IntelliSense 代码段的短代码块的容器。
– Declarations : 指定构成代码段可编辑部分的文本和对象。
– Imports : 指定IntelliSense 代码段使用的导入命名空间。
– References : 指定有关代码段所需的程序集引用的信息。
代码段(Code Snippets)
• SnippetTypes : 指定Visual Studio 插入代码段的方式。
– SurroundsWith:允许将此代码段放置在一段选定的代码周围。
– Expansion:允许将代码段插入到光标处。
• Code : 提供用于容纳IntelliSense 代码段的短代码块的容
器。属性如下:
– Language:代码语言(必选)
– Kind : 指定代码段所包含的代码类型,并据此指定可以插入代码段
的位置。可用的值有method body、method decl、type decl、
page、file 和any
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
代码段(Code Snippets)
• 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>
代码段(Code Snippets)
• 如何使用代码段?
– 通过键盘快捷键
• Ctrl+K、Ctrl+X
• Ctrl+K、Ctrl+S (外侧代码段)
– 通过IntelliSense 自动完成使用代码段
• 键入快捷方式,键入两次Tab 以调用代码段
– 通过“编辑”菜单使用代码段
• 从“编辑”菜单中选择“IntelliSense”,然后选择“插入代码段”命
令
– 通过上下文菜单使用代码段
• 右击光标,然后从上下文菜单中选择“插入代码段”命令
重构(Refactoring)
• 什么是重构?
– 重构是在编写代码后在不更改代码的外部行为的前提
下通过更改代码的内部结构来改进代码的过程。
• 重构类型
– 提取方法
– 重命名
– 封装字段
– 提取接口
– 将局部变量提升为参数
– 移除参数
– 重新排列参数
重构(Refactoring)
• 提取方法
– 可以通过从现有成员的代码块中提取选定的代码来创建新方法
– 创建的新方法中包含选定的代码,而现有成员中的选定代码被替
换为对新方法的调用
– 代码段转换为其自己的方法,使您可以快速而准确地重新组织代
码,以获得更好的重用和可靠性
• 优点
– 通过强调离散的可重用方法鼓励最佳的编码做法。
– 鼓励通过较好的组织获得自记录代码。当使用描述性名称时,高
级别方法可以像读取一系列注释一样进行读取。
– 鼓励创建细化方法,以简化重载。
– 减少代码重复
重构(Refactoring)
• 重命名
– 提供了一种重命名代码符号(如字段、局部变量、方法、命名空
间、属性和类型)标识符的简单方法
– “重命名”功能除了可用来更改标识符的声明和调用以外,还可用来
更改注释中和字符串中的名称
• 在何处可以使用重命名操作?
– 代码编辑器
– 类视图
– 对象浏览器
– Windows 窗体设计器的“属性网格”
– 解决方案资源管理器
重构(Refactoring)
• 重命名执行些什么操作?
– 字段
• 将字段的声明和用法更改为新名称。
– 局部变量
• 将变量的声明和用法更改为新名称。
– 方法
• 将方法的名称以及对该方法的所有引用更改为新名称。
– 命名空间
• 将声明、所有正在使用的语句及完全限定名称中的命名空间名
称更改为新名称。
– 属性
• 将属性的声明和用法更改为新名称。
– 类型
• 将类型的所有声明和所有用法都更改为新名称,包括构造函数
和析构函数。对于部分类型,重命名操作将传播到其所有部分。
重构(Refactoring)
• 封装字段
– 可以从现有字段快速创建属性,然后使用对新属性的
引用无缝更新代码
– 当某个字段为public(C# 参考)时,其他对象可以直
接访问该字段并对其进行修改,而不会被拥有该字段
的对象检测到。通过使用属性(C# 编程指南)封装该
字段,可以禁止对字段的直接访问。
– 仅当将光标与字段声明置于同一行时,才可以执行“封
装字段”操作。
重构(Refactoring)
• 提取接口
– 使用来自现有类、结构或接口的成员创建新接口的简
单方法
– 当几个客户端使用类、结构或接口中成员的同一子集
时,或者当多个类、结构或接口具有通用的成员子集
时,在接口中嵌入成员子集将很有用
– 仅当将光标定位于包含要提取成员的类、结构或接口
中时,才可以访问此功能。当光标处于此位置时,调
用“提取接口”重构操作
重构(Refactoring)
• 将局部变量提升为参数
– 提供一种简单的方法,以在正确更新调用站点的同时
将变量从局部使用移动至方法、索引器或构造函数参
数
– 调用“将局部变量提升为参数”操作时,变量将被添加到
成员参数列表的结尾处
– 对已修改成员的所有调用都将使用新参数(将替代最
初赋给该变量的表达式)立即进行更新,并保留代
码,以使其像变量提升之前那样正常工作
– 将常数值赋值给提升的变量时,此重构操作效果最好。
必须声明并初始化该变量,而不能仅声明或仅赋值
重构(Refactoring)
• 移除参数
– 从方法、索引器或委托中移除参数的简单方法
– 在调用成员的任何位置,都会将参数移除以反映新声
明
• 重新排列参数
– 对方法、索引器和委托的参数顺序进行更改的简单方
法
– 可以通过方法声明或方法调用来重新排列参数。要将
光标置于方法声明或委托声明中,而不是置于正文中。
类设计器(Class Designer)
• 什么是类设计器?
– 在Visual Studio 中,类设计器以类关系图的形式提供
了一种可视的设计图面,可用于设计、查看和重构
Visual Studio 项目中的类和其他类型
类设计器(Class Designer)
• 类设计器的功能
– 设计。您可以通过编辑类关系图来编辑项目代码。您
可以添加新元素和删除不想要的元素。您所做的更改
将在代码中反映出来。
– 可视化。您可以查看以图形方式表示的项目中的类
型,以便更好地了解项目的结构。通过自定义此视
图,您可以突出显示您认为最重要的项目的详细信息。
您可以保存项目的图像,以便在演示或文档中使用。
– 重构类和类型。可以重写方法、重命名标识符、重构
参数,以及实现接口和抽象类。
类设计器(Class Designer)
• 如何使用类设计器?
– 将类关系图元素复制到Microsoft Office 文档
– 将类关系图导出为图像
– 打印类关系图
– 向类关系图添加注释
– 从类关系图中移除类型形状
– 从类关系图中删除类型形状和关联的代码
• 设计类和类型
– 在类关系图上创建类型
– 定义类型之间的继承关系
– 定义类型之间的关联
类设计器(Class Designer)
• 重构类和类型
– 重写类型成员
– 重命名类型和类型成员
– 重新排列参数(仅限C#)
– 实现接口
– 实现抽象类
– 将类型成员从一种类型移到另一种类型中
– 提取到接口(仅限C#)
C# 调试增强
(C# Debugger Enhancements)
• Visual C# 的“编辑并继续”功能
– 使用C# 的“编辑并继续”,可以一边进行调试一边在中
断模式下更改代码。不必停止并重新启动调试会话即
可应用更改。在运行模式下,源编辑器是只读的。
– “编辑并继续”处理方法体内的大多数类型的代码更改
– 方法体外的大多数更改以及方法体内的小部分更改在
调试期间不能应用
C# 调试增强
(C# Debugger Enhancements)
• 在调试会话期间不能对C# 代码应用下列更改
– 对当前语句或任何其他活动语句的更改
– 对全局符号的更改,包括:
• 添加新类型
• 在类型中添加方法
• 更改类型的签名
• 在类型中添加字段、事件或属性
– 编辑匿名方法或任何包含匿名方法的方法
– 添加新的匿名方法
– 添加、移除或更改属性
– 添加、移除或更改using 指令
– 移除或更改局部变量。允许添加局部变量
– 在活动语句前后添加foreach、using 或lock
– 修改包含yield return 或yield break 语句的方法
– 更改具有由匿名方法初始化的字段的构造函数
C# 调试增强
(C# Debugger Enhancements)
• “编辑并继续”功能对异常的支持:
– “编辑并继续”支持对catch、finally 和try 块的更改,但活动方法
(比如当前处于调用堆栈中的方法)中的块除外。
– 如果活动函数是调用堆栈中最近使用的函数,则在该函数中“编辑
并继续”不支持:
• 在活动语句的前后添加catch 或finally块。
• 添加嵌套级别大于六的嵌套异常处理程序。
– 如果活动函数不是调用堆栈中最近使用的函数,则在该函数中“编
辑并继续”不支持:
• 在活动语句的前后添加catch、finally 或try块。
• 添加嵌套级别大于六的嵌套异常处理程序。
• 更改包含活动语句的try块内的代码。
• 什么是代码段?
– 将一段代码行提取出来,可以多次重复使用。VS IDE
提供对代码段的完整支持、使代码编写更快、更容易、
更可靠
• 一个代码段的例子:
for (int i = 0; i < 10; i++)
{
}
XML文件
(for.snippet)
代码段(Code Snippets)
• 如何定义代码段?
<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>
代码段(Code Snippets)
• Header 包含以下子元素:
– Author : 指定代码段的作者姓名。
– Description : 指定有关IntelliSense 代码段内容的描述信息。
– HelpUrl : 指定提供有关代码段的更多信息的URL。
– Keywords : 为代码段指定自定义关键字。
– Shortcut : 指定用于插入代码段的快捷方式文本。
– SnippetTypes : 指定Visual Studio 插入代码段的方式。
– Title : 指定代码段的标题。
• Snippet 包含以下子元素:
– Code : 提供用于容纳IntelliSense 代码段的短代码块的容器。
– Declarations : 指定构成代码段可编辑部分的文本和对象。
– Imports : 指定IntelliSense 代码段使用的导入命名空间。
– References : 指定有关代码段所需的程序集引用的信息。
代码段(Code Snippets)
• SnippetTypes : 指定Visual Studio 插入代码段的方式。
– SurroundsWith:允许将此代码段放置在一段选定的代码周围。
– Expansion:允许将代码段插入到光标处。
• Code : 提供用于容纳IntelliSense 代码段的短代码块的容
器。属性如下:
– Language:代码语言(必选)
– Kind : 指定代码段所包含的代码类型,并据此指定可以插入代码段
的位置。可用的值有method body、method decl、type decl、
page、file 和any
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
代码段(Code Snippets)
• 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>
代码段(Code Snippets)
• 如何使用代码段?
– 通过键盘快捷键
• Ctrl+K、Ctrl+X
• Ctrl+K、Ctrl+S (外侧代码段)
– 通过IntelliSense 自动完成使用代码段
• 键入快捷方式,键入两次Tab 以调用代码段
– 通过“编辑”菜单使用代码段
• 从“编辑”菜单中选择“IntelliSense”,然后选择“插入代码段”命
令
– 通过上下文菜单使用代码段
• 右击光标,然后从上下文菜单中选择“插入代码段”命令
重构(Refactoring)
• 什么是重构?
– 重构是在编写代码后在不更改代码的外部行为的前提
下通过更改代码的内部结构来改进代码的过程。
• 重构类型
– 提取方法
– 重命名
– 封装字段
– 提取接口
– 将局部变量提升为参数
– 移除参数
– 重新排列参数
重构(Refactoring)
• 提取方法
– 可以通过从现有成员的代码块中提取选定的代码来创建新方法
– 创建的新方法中包含选定的代码,而现有成员中的选定代码被替
换为对新方法的调用
– 代码段转换为其自己的方法,使您可以快速而准确地重新组织代
码,以获得更好的重用和可靠性
• 优点
– 通过强调离散的可重用方法鼓励最佳的编码做法。
– 鼓励通过较好的组织获得自记录代码。当使用描述性名称时,高
级别方法可以像读取一系列注释一样进行读取。
– 鼓励创建细化方法,以简化重载。
– 减少代码重复
重构(Refactoring)
• 重命名
– 提供了一种重命名代码符号(如字段、局部变量、方法、命名空
间、属性和类型)标识符的简单方法
– “重命名”功能除了可用来更改标识符的声明和调用以外,还可用来
更改注释中和字符串中的名称
• 在何处可以使用重命名操作?
– 代码编辑器
– 类视图
– 对象浏览器
– Windows 窗体设计器的“属性网格”
– 解决方案资源管理器
重构(Refactoring)
• 重命名执行些什么操作?
– 字段
• 将字段的声明和用法更改为新名称。
– 局部变量
• 将变量的声明和用法更改为新名称。
– 方法
• 将方法的名称以及对该方法的所有引用更改为新名称。
– 命名空间
• 将声明、所有正在使用的语句及完全限定名称中的命名空间名
称更改为新名称。
– 属性
• 将属性的声明和用法更改为新名称。
– 类型
• 将类型的所有声明和所有用法都更改为新名称,包括构造函数
和析构函数。对于部分类型,重命名操作将传播到其所有部分。
重构(Refactoring)
• 封装字段
– 可以从现有字段快速创建属性,然后使用对新属性的
引用无缝更新代码
– 当某个字段为public(C# 参考)时,其他对象可以直
接访问该字段并对其进行修改,而不会被拥有该字段
的对象检测到。通过使用属性(C# 编程指南)封装该
字段,可以禁止对字段的直接访问。
– 仅当将光标与字段声明置于同一行时,才可以执行“封
装字段”操作。
重构(Refactoring)
• 提取接口
– 使用来自现有类、结构或接口的成员创建新接口的简
单方法
– 当几个客户端使用类、结构或接口中成员的同一子集
时,或者当多个类、结构或接口具有通用的成员子集
时,在接口中嵌入成员子集将很有用
– 仅当将光标定位于包含要提取成员的类、结构或接口
中时,才可以访问此功能。当光标处于此位置时,调
用“提取接口”重构操作
重构(Refactoring)
• 将局部变量提升为参数
– 提供一种简单的方法,以在正确更新调用站点的同时
将变量从局部使用移动至方法、索引器或构造函数参
数
– 调用“将局部变量提升为参数”操作时,变量将被添加到
成员参数列表的结尾处
– 对已修改成员的所有调用都将使用新参数(将替代最
初赋给该变量的表达式)立即进行更新,并保留代
码,以使其像变量提升之前那样正常工作
– 将常数值赋值给提升的变量时,此重构操作效果最好。
必须声明并初始化该变量,而不能仅声明或仅赋值
重构(Refactoring)
• 移除参数
– 从方法、索引器或委托中移除参数的简单方法
– 在调用成员的任何位置,都会将参数移除以反映新声
明
• 重新排列参数
– 对方法、索引器和委托的参数顺序进行更改的简单方
法
– 可以通过方法声明或方法调用来重新排列参数。要将
光标置于方法声明或委托声明中,而不是置于正文中。
类设计器(Class Designer)
• 什么是类设计器?
– 在Visual Studio 中,类设计器以类关系图的形式提供
了一种可视的设计图面,可用于设计、查看和重构
Visual Studio 项目中的类和其他类型
类设计器(Class Designer)
• 类设计器的功能
– 设计。您可以通过编辑类关系图来编辑项目代码。您
可以添加新元素和删除不想要的元素。您所做的更改
将在代码中反映出来。
– 可视化。您可以查看以图形方式表示的项目中的类
型,以便更好地了解项目的结构。通过自定义此视
图,您可以突出显示您认为最重要的项目的详细信息。
您可以保存项目的图像,以便在演示或文档中使用。
– 重构类和类型。可以重写方法、重命名标识符、重构
参数,以及实现接口和抽象类。
类设计器(Class Designer)
• 如何使用类设计器?
– 将类关系图元素复制到Microsoft Office 文档
– 将类关系图导出为图像
– 打印类关系图
– 向类关系图添加注释
– 从类关系图中移除类型形状
– 从类关系图中删除类型形状和关联的代码
• 设计类和类型
– 在类关系图上创建类型
– 定义类型之间的继承关系
– 定义类型之间的关联
类设计器(Class Designer)
• 重构类和类型
– 重写类型成员
– 重命名类型和类型成员
– 重新排列参数(仅限C#)
– 实现接口
– 实现抽象类
– 将类型成员从一种类型移到另一种类型中
– 提取到接口(仅限C#)
C# 调试增强
(C# Debugger Enhancements)
• Visual C# 的“编辑并继续”功能
– 使用C# 的“编辑并继续”,可以一边进行调试一边在中
断模式下更改代码。不必停止并重新启动调试会话即
可应用更改。在运行模式下,源编辑器是只读的。
– “编辑并继续”处理方法体内的大多数类型的代码更改
– 方法体外的大多数更改以及方法体内的小部分更改在
调试期间不能应用
C# 调试增强
(C# Debugger Enhancements)
• 在调试会话期间不能对C# 代码应用下列更改
– 对当前语句或任何其他活动语句的更改
– 对全局符号的更改,包括:
• 添加新类型
• 在类型中添加方法
• 更改类型的签名
• 在类型中添加字段、事件或属性
– 编辑匿名方法或任何包含匿名方法的方法
– 添加新的匿名方法
– 添加、移除或更改属性
– 添加、移除或更改using 指令
– 移除或更改局部变量。允许添加局部变量
– 在活动语句前后添加foreach、using 或lock
– 修改包含yield return 或yield break 语句的方法
– 更改具有由匿名方法初始化的字段的构造函数
C# 调试增强
(C# Debugger Enhancements)
• “编辑并继续”功能对异常的支持:
– “编辑并继续”支持对catch、finally 和try 块的更改,但活动方法
(比如当前处于调用堆栈中的方法)中的块除外。
– 如果活动函数是调用堆栈中最近使用的函数,则在该函数中“编辑
并继续”不支持:
• 在活动语句的前后添加catch 或finally块。
• 添加嵌套级别大于六的嵌套异常处理程序。
– 如果活动函数不是调用堆栈中最近使用的函数,则在该函数中“编
辑并继续”不支持:
• 在活动语句的前后添加catch、finally 或try块。
• 添加嵌套级别大于六的嵌套异常处理程序。
• 更改包含活动语句的try块内的代码。