A.3.7代码编辑器

代码编辑器可以说是最常用的功能之一,它的主要用途当然就是编写代码,例如C#、VisualBasic.NET、F#等。除此之外,还可用于编辑HTML、CSS以及XML等。需要关注的几个主要功能点如下:

❑突出显示引用(如图A-38所示)

A.3.7代码编辑器 - 图1

图 A-38 突出显示引用

❑通过鼠标滚轮缩放显示

❑重构(如图A-40)

这里的重构指的是“代码重构”,在不影响输出结果的前提下,对软件代码做任何改动以增加可读性或者简化结构。重构一般需要借助工具来完成,工具能够帮助我们在修改代码同时修改所有引用该代码的地方。重构既不会修正错误,也不会增加新的功能。它只是为了提高代码的可读性或者改变代码内部结构与设计,包括移除死代码,从而使其在将来更容易阅读和维护。一个典型的重构案例是,修改一个变量的名称使其具有更明确的含义。

A.3.7代码编辑器 - 图2

图 A-39 通过鼠标滚轮进行缩放

Visual Studio 2010提供了对重构的支持,通过菜单栏和代码编辑器的右键上下文菜单都可以访问重构功能,如图A-40和图A-41所示。

A.3.7代码编辑器 - 图3

图 A-40 通过菜单栏访问重构功能

A.3.7代码编辑器 - 图4

图 A-41 通过代码编辑器的右键上下文菜单访问重构功能

这里我们以一个基本的重构操作为例,演示重构功能的使用。在示例中,我们将一个变量进行重命名,注意观察重构操作的执行,以及重构完成后相关引用代码是否进行了正确的改变。我们要对中的msg变量进行重命名,为了更好地表达变量所代表的含义,决定将代码清单A-1中msg变量重命名为userName。

代码清单A-1 重构前的代码


private void button1_Click(object sender,EventArgs e){

string msg=CheckValid(textBox1.Text);

if(!string.IsNullOrEmpty(msg)){

MessageBox.Show(string.Format(“你好啊,{0}!”,msg));

}

else

{

MessageBox.Show(“请输入要打招呼的人!”);

}}


方法是:

1)将光标移到msg变量内部,或者选择msg变量。

2)通过菜单或右键上下文菜单访问“重构”功能,使用其中的“重命名”功能,或者直接使用快捷键F2。

3)在弹出的窗口中输入新的变量名userName,点击确定,如图A-42所示。

A.3.7代码编辑器 - 图5

图 A-42 重命名窗口

4)如果上一步选择了“预览引用更改”,则会显示“预览更改”窗口,确认引用到原msg变量的地方都进行了正确的修改,单击“应用”按钮,如图A-43所示。

A.3.7代码编辑器 - 图6

图 A-43 预览更改窗口

5)重构完毕,一般需要单元测试以保证重构没有改变原代码的运行结果,重构后的代码如代码清单A-2所示。

代码清单A-2 重构后的代码


private void button1_Click(object sender,EventArgs e)

{

string userName=textBox1.Text;

if(!string.IsNullOrEmpty(userName))

{

MessageBox.Show(string.Format(“你好啊,{0}!”,userName));

}

else

{

MessageBox.Show(“请输入要打招呼的人!”);

}

}


❑使用时生成

我们可以理解为“按需生成”,就是先使用,再生成。通过“使用时生成”功能,可以直接使用类和成员,而不必提前定义它们。也就不必离开当前代码位置,即可为要使用但尚未定义的类、构造函数、方法、属性、字段或枚举生成存根。这尽可能减少了对工作的中断,并减少了按键次数。例如,我们可以先使用CheckValid方法,用以检查用户输入信息的有效性,可以直接键入方法名,并将用户输入的内容作为方法参数,但此时CheckValid方法根本就不存在,因此IDE会使用红色波浪线标出错误,以提醒我们使用了一个不存在的方法,此时我们可以将光标移到该错误上,可以在上下文菜单或者使用快捷键(Ctrl+"."),此时将显示生成此方法的选项,回车即可生成,如图A-44所示。

A.3.7代码编辑器 - 图7

图 A-44 使用时生成

生成的CheckValid方法存根如代码清单A-3所示。

代码清单A-3 CheckValid方法存根


private string CheckValid(string p)

{

throw new NotImplementedException();

}


❑实时语义错误

“实时语义错误”功能得到了增强,对用波浪下划线指示键入时的错误和警告这一功能进行了扩展,现在可适用于方法体外部的构造,例如返回类型、参数类型以及方法声明中的默认值。

默认情况下,代码编辑器并不显示“实时语义错误”,需要我们打开相应配置,如图A-45所示。

A.3.7代码编辑器 - 图8

图 A-45 设置使用“实时语义错误”显示功能

设置好以后,我们故意犯个错误,我们知道CheckValid方法本来只有一个参数,我们在使用的时候键入第2个参数,此时编辑器中立刻就会使用红色的波浪线将错误标识出来,并同时显示正确方法签名,如图A-46所示。

A.3.7代码编辑器 - 图9

图 A-46 编辑器中实时标识出来的语义错误

❑定位到

可以使用“定位到”功能来搜索源代码中的符号或文件。可通过菜单“编辑-定位到”使用此功能,如图A-47所示。此功能有如下几个要点:

A.3.7代码编辑器 - 图10

图 A-47 “定位到”功能演示

1)如果搜索字符串包含大写字符,则搜索区分大小写;否则,搜索不区分大小写。

2)通过使用Camel大小写格式和下划线字符,可以将符号分为多个关键字,这样可搜索包含在符号中的关键字。例如,若要查找"AddOrderHeader"符号,可以搜索"add"、"order"、"header"、"order add"、"AOH"以及其他组合,如表A-3所示。

A.3.7代码编辑器 - 图11

3)“定位到”功能不支持如下的特殊逻辑或特殊字符:

❑通配符匹配

❑布尔逻辑运算符,包括and、or、&和|

❑正则表达式