《Visual Studio.NET Tips and Tricks》第四章的翻译

 

第四章           使用VS.NET 2005

VS.NET2005VS.NET20022003之上作了很大的改进。微软生产了比以往更令人惊喜的工具。跳到VS.NET2005版比从VS.NET2002跳到VS.NET2003变化非常大以至于需要完整的一章来介绍它。这章集中于所有前面的版本并没有实现的新的特性。这并不意味着前三章的内容在VS.NET2005中不能使用。事实上,它们中的大多数仍然能工作并有了重大的改善。

这章并没有覆盖.NET框架2.0版本和它的新类和语法。本质上,VS.NET20052.0版本是紧密相关的,偶尔我使用了特定的2.0版本特有的代码,但这仅仅是显示一个新的IDE的特性。在这章中我提到VS.NET时一般都指VS.NET2005

这本书是基于VS.NET2005 Beta 1版的。VS.NET2005的最终版可能会和这章描述的内容略有不同。

重构代码

       VS.NET2005中一个最令人注目的技巧可能就是代码重构特性了。代码重构就是重新组织你的代码,为了清洁但并不改变业务逻辑。这包括重命名符号,提重复的代码段到一个单独的方法中等等。有许多重构动作可以用VS.NET来执行。简单地右击一个选择从弹出的菜单上选择重构。你现在能看到一列你可以应用到你的选择上的可能的重构方法(见图65)。

 

65      从一个选择中提到方法

       提取方法Ctrl-Alt-MM)是创造一个新的方法并移动你的选择到这个新的方法中的过程。替代选择,会产生一个新的方法调用(见图66)。这个特性并不仅仅是移去代码到一个方法中。VS.NET察看你选择的代码,寻找并没有在选择中定义的变量引用,并把它们转换成参数。

 

66      提取参数后的新的方法

       重命名Ctrl-Alt-MR)允许你重命名一个符号(一个变量,常量,枚举等等),并能自动在整个解决方案中执行一个必要的查找-替换操作更新对这个符号的引用。在过去,开发者手工执行一个全局的查找-替换操作,不幸的是这也会替换字符串文本中的变量名,或它是另一个变量名中的一部分时也会被替换。在VS.NET2005中的重命名特性允许你排除字符串文本或注释,以便你只更新真实的变量引用。

       封装字段Ctrl-Alt-ME)允许你创建属性,包括它们的GetSet函数和私有的字段,并能在你的解决方案中自动更新所有的引用旧的字段到新的属性。

       提取接口Ctrl-Alt-M,I)允许你从当前类中所有存在的属性和方法选择,并产生一个接口到一个单独的文件中。接口被自动创建包括恰当的属性的GetSet方法和方法的签名。新的接口和当前的类有同样的名称,前加一个字母I,这遵循.NET对接口的命名规范。

       最终,从字面可以理解的方法将局部变量提升为参数(Ctrl-Alt-MP),移去参数(Ctrl-Alt-MV)和重新排列参数(Ctrl-Alt-MO)只工作于方法。为了移去和重新排列参数,只需要在方法名上右击。

产生方法存根

       VS.NET对一个方法调用有能力为你产生方法存根。有时你开发代码时已经知道某个方法看起来像什么,你可能会发现在实际写一个方法体前写一个方法调用代码。在这种情况下,你能简单地在方法调用上右击,从弹出的菜单上选择产生方法存根(见图67-或使用新的智能标签。

67      从方法调用中产生方法存根

       VS.NET创建一个方法外壳,匹配和调用一致的方法签名(见图68)。不但有正确的参数类型如同传给方法的实际参数,而且正式的参数有两样的名字(提供传给方法的变量名,而不是实际的值)。

68      有同样的签名的新产生的方法

       在方法体中,VS.NET插入引发NotImplementedException异常的代码,标明开发者在生成应用前并没有用真实的业务代码填写方法。

使用错误修正建议

       你知道一个Word处理器的拼写-检查是如何允许你在一个拼写错误的词上右击,看到一列可能的修正呢?VS.NET有同样的特性对于不正确的语法。比如你引用Timer类时忘记在文件顶部包括正确的命名空间。词Timer会出现一个蓝的曲线,标明VS.NET并没有找到Timer类。

       在蓝的曲线结尾处有一个红线,当鼠标移至上面时,会变成一个智能标签建议所有Timer类相关的可以选择的列表:System.Timers.Timer,System.Threading.Timder,System.Windows.Forms.Timers,甚至我的用户定义的MinhNguyen.Timer(见图69)。一旦你做出选择,VS.NET会用完整的类名替换对Timer类末解决的引用。VB.NET也会对不正确的语法提出建议,例如在Try-Catch块中忘记“Try”语句。

 

69      VS.NET的解决类的建议方法

       C#中,当你在一个词上右击,你能使用蓝色的智能标签或简单地右击下划线的词从弹出的菜单上选择解决时。建议就会以子菜单的形式出现。你有机会加相应的using语句或简单地使用全类名。

       这些建议也包括用户定义的类,并不仅仅是.NET框架中存在的类。

使用预定义的代码片断

       代码片断是流行的,预定义的文本模板,开发者能够选择,而不是手工敲入。例如,对Foreach循环,代替敲你需要的所有代码,你能简单地敲foreach。智能感知用新的代码片断图标显示Foreach项(见图70)。如果你从智能感知列表中选择代码片项,接着按TabVS.Net会插入对于“foreach”的预定义的代码片断。

70      智能感知中的代码片断(文档片断图标)

       除了扩展一个预定义的代码片断外,VS.NET以黄色突出显示代码片断中的占位符-当使用代码片断时-必须改变到你的特定的使用。按Tab在这些占位符之间跳转。在我们的Foreach的例子中,你必须改变的三项是对象类型,对象名称,和你想循环的集合的名称。VS.NET2005显示一个高度定制化的智能感知,列出了逻辑上你能插入在占位符中的项(见图71)。在Foreach例子中的要循环的占位符的集合,只有实现了IEnumerable接口的对象。

71      Foreach代码片断扩展

       你也能通过右击代码编辑器中的任何地方,对于C#从弹出的菜单上选择智能感知>插入扩展(对于VB.NET插入片断)。它会以智能感知列出代码片断。VB.NET的预定义的代码片断远远多于C#的。它包括了对于现实编程过程中最好的实践活动,从数据访问和加密到图形,数学,IO操作等等。此外,VB.NET中所有的代码片断分类成逻辑文件夹。

       在前面的例子中,我们扩展了词“foreach”,用完整的Foreach代码片断。在C#中插入代码片断的另一种方式是包围一个选择。在这种情况下,你显亮一个文本段落,右击它,从弹出菜单上选择智能感知>包围。这只列出了能够包围的代码片断,它有一个定义的主体段。例如,如果你选择“foreach”,所有选择的文本将被放到Foreach循环主体中。

       如我前面提到的,VS.NET带有许多预定义的代码片断用来供你选择。通过到工具>代码片断管理器或通过按Ctrl-KCtrl-B你能看到所有的代码片断的列表和它们预指定的快捷键。

       代码片断管理器包含了每种.NET语言所有预定义的代码片断和它们预指定的快捷键(见图72)。注意到你能创建你自己的代码片断,如果你熟悉VS.NET使用的代码片断XML架构。

72      使用代码片断管理器

       VB.NET创建代码片断更容易。简单地显亮你的代码段落,右击它,从弹出菜单上选择创建片断。它会把你的选择带进片断编辑器,允许你编辑和修改。在这个编辑器中,你能右击一个选择从弹出菜单上选择替换来定义和命名前面提到的占位符。在这你也能定义你的片断的名称,快捷键,描述,要求的引用等等。

自动布局UI元素

如果你在一个Windows窗体上定位UI元素时,当你移动元素或重置元素的大小写时你会注意到不同的颜色线出现在窗体上(见图73)。这允许你捕捉你的UI元素到垂直或水平线。粗的蓝线标明其它UI元素已经被捕捉;这有助于你对齐元素。绿的点线标明你移动或重置大小时在UI元素间缺省的间隔。这有助于在元素间维持一致的间隔。最终,粗的红线标明在当前元素内部的文本和相邻的UI元素或它的文本对齐。

 

73      对齐UI元素的颜色线(粗的蓝的和点绿的)

       如果你想定位UI元素并不想捕捉这些颜色线,按Alt临时关闭自动对齐。在VS.NET20022003中,你能切换到网格方式,在这UI元素被对齐到预定义的网格。简单到工具>选项>Windows窗体设计器>常规,改变布局模式到“捕捉到网格”。注意到在改变这个值后,你必须关闭和重新打开设计器视图来使用新选择的布局模式。在“捕捉到网格”模式,你能按Ctrl键移动元素,并不捕捉它们到网格。

加一个标准的菜单项

       标准的Windows应用使用共同的一套顶层菜单项。在多数情况下,它们是文件,编辑,工具和帮助。VS.NET2005允许你增加这些缺省的菜单项到你自己的Windows窗体应用中。

       拖一个MenuStrip到你的Windows窗体。当MenuStrip被选择时,在属性窗口下边的描述面板显示一个插入标准项链接(见图74)。如果你点击链接,VS.NET插入这些标准项到你的MenuStrip上。你插入的菜单项也包括缺省的子项。例如,文件菜单包括常用的新建,打开,保存,另存为,打印,打印预览和退出项,伴随有它的缺省的快捷键,热键和图标。

74      自动插入的标准菜单项

使用属性编辑视图编辑UI元素属性

       当你第一次创建你的Windows窗体应用时,你可能必须得拖动你的按钮,文本和另的UI元素到你的窗体下。当你这样作时,所有这些元素有缺省的名字如“Button1,“Button2”TextBox1”等等。改变这些缺省的名字或它们的文本值要求你重复地选择一个元素,接着在属性窗口改变它的名字或文本属性。在一个复杂的Windows窗体应用中,有许多元素,这相当耗时。

       VS.NET2005引进了一个对你的控件快速设置这些“流行”属性的方法。在你的窗体上右击,从弹出的菜单上选择属性编辑视图,或点击布局工具条上的属性编辑视图按钮(见图75)。它切换你的窗体设计器到快速编辑模式,在这你能以后台的方式改变所有控件的属性。

75      在布局工具条的右边属性编辑视图按钮

       通过在新的快速编辑模式Tab页上的下拉列表中选择你想改变的属性。无论你选择什么属性,窗体设计器显示每一个控件属性的值在浮动在UI元素上的可编辑文本框的内部。当你编辑这些文本框中的一个时,下划线UI元素的属性发生改变,接着下一个文本框得到焦点(见图76)。

 

76      后台方式改变每个控件的文本属性

       这个方法允许你快速,容易地改变所有元素一个常规的属性,因为你不需要提鼠标或从一项滚动到另一项。简单地输入新的值,接着按回车,对每个控件重复。再没有比这更容易的方法了。

精确地控制C#代码格式

       开发者对于C#格式化标准有着不同的爱好。对于“格式化标准”,我指的是这些小的规则如空格,缩排,新行,自动折叠等等。对我来说,开发者总是遵循他们自己喜欢的规则。对VB.NET来说这并不是问题,缺省地当你敲一新行时,它会自动格式化你的代码成VB.NET标准。换句话说,对于C#,有许多不同的方式来写相同的代码。

       VS.NET2005现在允许你精确地控制你的C#代码是如何被格式化的。如果你选择工具>选项>文本编辑器>C#>格式化,你会看到一组设置能够决定你喜欢的C#格式化的方向,包括缩排,新行,空格和自动折叠。这似乎并不是一件简单的事情。这些设置大多数比较直观,但当你不能确定时,一个预览窗口使用C#代码例子显示你所作的选择。

设置控件的Tab次序

       Tab次序就是当你按Tab键时窗体上的控件接受焦点的次序。你能控制这个次序,通过设置每个控件的Tab Index属性为一个数字,它表明在这个次序中的相对位置。这已证明有时是困难的,因为如果你不选择它们时,你不知道-不能看到-其它控件的Tab IndexVS.NET2005引进了一个新的方式来设置Tab次序:在布局工具条上的Tab次序按钮(见图77)。

 

77      布局工具条左边的Tab次序按钮

       Tab次序按钮显示了窗体上所有UI元素的Tab index。这种模式是非常好的:你现在不但能看到所有Tabindex,而且你能重复地点击每个UI元素来以线性增长的方式设置Tab次序。

执行一个类,实例和方法搜索

       一个解决方案中有许多项目,有时很难定位一个类,实例或方法。如果你知道一个类,实例或方法的名字,但却不知道它在什么位置,你可能总是使用全局查找特性来定位。

       使用新的搜索特性的一个更好的方法就是类视图。打开类视图(点击解决方案资源管理器旁边的Tab页或按Ctrl-Shift-C)注意到顶部的搜索窗口。你并不须输入完整的你想搜索的项的名称,部分搜索也能工作。类视图过滤项,只显示匹配你的部分搜索关键字的项。

查看代码定义

       代码定义视图是VS.NET2005引进的新的窗口,当你移动鼠标到一个类型上时允许你查看类的定义。通过选择视图>其它视图>代码定义视图或按Ctrl-Shift-D能看到这个窗口。缺省状态下,它出现在主文本编辑器的下面。当你移动光标到定义一个类的词的周围或内部时(见图78),代码定义视图显示了类的所有属性,方法,索引和其它成员-这些都会伴随有XML注释(如果有的话)。这个工具类似于早期的VS.NET版本的WinCB工具的输出。

 

78      代码定义视图显示类信息

       代码定义视图也能用于用户定义的类。事实上,如果类是你的解决方案的一部分,它显示类的实际源代码-并不仅仅是通过反射得到的代码。

HTML视图中编辑Web控件

       VS.NET20022003中,你只能在设计器视图修改Web控件。这并不是一种舒适的方式,因为需要额外的重绘过程,有时会不正确地自动格式化你的HTML代码。现在这已经有了很大改进。首先,你的HTML代码如果你没有特别要求它不再对它格式化。其次,任何你能在设计器视图作的,现在也能在HTML视图作了。

       例如,你能从工具箱上直接拖控件到HTML编辑器。必需的HTMLASP.NET标签会自动插入。当光标被定位到某一个Web控件时,你也能在属性窗口修改控件的属性。改变立即在HTML视图以属性出现。设置一个属性为空就会从HTMLASP.NET标签中移去属性。

验证HTML代码的访问性

       企业的Web应用应当被设计成能够被残疾人阅读。在你写HTML代码时有一套全面的规则和向导需要遵循,允许残疾人使用特定的工具在你的确Web站点中导航。例如,图像标签应当总是包含一个定义的ALT属性。插入在ALT属性中的字符串能够被扬声器读给视觉有缺陷的访问者。有许多Web站点能够对这些规则检查你的Web站点,但是,现在这个功能已经内置到VS.NET中了。

       HTML视图,简单地点击访问性按钮(见图79)或选择工具>检查访问性。你也能在解决方案资源管理器中的页面上右击,从弹出的菜单上选择检查访问性来访问这个功能。

 

79      访问性按钮

       在访问性验证对话框上,你能选择你想用那套规则来验证你的HTML代码(见图80)。WCAG代表Web Content Accessibility Guidelines(在www.w3.org/WAI/GL/上得到更多的信息)。在这些向导中每一个提议-作为一个“检查点”-被指定一个优先级。优先级1的检查点是最重要的。如果你的HTML代码违背了优先级1Web用户不能使用他们的工具在你的Web站点上冲浪了。优先级2提议也是强烈建议的,但违背它也并不会使你的站点无用。优先级3检查点只是推荐,并不要求。

 

80      检查HTML的访问性

       访问板508部分指对美国国会在1998会通过的复原行动的完善,复原行动要求联邦机构保证它们的站点能够被残疾人访问(从www.section508.gov上得到更多的信息)。在WCAG508部分,规则是类似的,本质上也是相互重叠的。如果你创建站点想让一个联邦机构使用,确保检查访问板508部分选项。

       一旦你按验证按钮,VS.NET验证你的HTML代码并在任务列表中显示所有的错误和警告。如果你从没有用这些标准验证过你的站点,你得准备会得到一长列的建议!

使用不同的.NET语言工作

       VS.NET20022003中,你不能使用不同的.NET语言创建一个ASP.NET站点。站点必须完全用C#VB.NETASP.NET支持的语言来写。但在VS.NET2005中不在是这种情况了。如果你在你的站点项目上右击,从弹出的菜单上选择增加新项目,你会注意到新的增加新项目对话框提示你选择对于新文件想使用的语言。你甚至能用一种语言写一个内容页,使用另一种语言写主页面)(见图81)。

 

81      使用不同.NET语言的站点

       一个开发者不太可能选择使用不同的语言写一个Web站点,但这个特性至少允许从另一个项目中导入到你当前的项目时并不用担心语言的不同。

通过FTP打开Web项目

       你可能没有注意到,在VS.NET2005中,项目和解决方案文件不再要求打开一个Web项目。现在有几个别的方法来打开Web站点。如果你选择文件>打开>Web站点,你会看到有几个选项。

       你能访问它们通过文件系统(指向一个文件夹),通过IIS(指向一个虚拟目录),或通过FTP。当通过FTP联接时,VS.NET首先下载文件和目录列表来组成Web站点。当你打开一个Web站点文件时,它下载实际的文件到一个临时位置接着打开它(见图82)。保存文件被上载到Web服务器,所作的改变立即生效。

82      通过FTP打开一个Web站点

       要承认,这个特性并不会用在一个真实的企业形势下,但它确实有助于快速和容易地修改一个简单的业余爱好者的Web站点。最显著的,你不必通过一个第三方的FTP客户端软件就能修改少数的Web页。

导入和导出IDE设置

       VS.NET是个功能非常强大的工具。在IDE中有许多你可以定制以满足你自己的需要。所有这个定制的问题就是你需要熟悉你特定的设置。从一台机器移到另一台机器就比较麻烦因为你不能让你的IDE的设置和你一起移动。

       VS.NET2005允许你导出你的IDE设置到一个XML文件(扩展名实际上是“.vssettings”)以便你能导入到另一台机器上的VS.NET的实例中。简单地选择工具>导入>导出设置。在导入/导出设置对话框上的树视图中,你能看到所有可以导出的定制的选项(见图83)。选择你想作为你的爱好的设置并导出它们到.vssettings文件。

83     导入或导出IDE设置

       当你导入.vssettings文件到另一个VS.NET IDE时,你能选择你想导入那个设置和那个设置将被忽略。

       在同一个对话框上你也能重置你的整个VS.NET IDE到一个特定的爱好。这可能是你以前保存的定制的爱好。你也能重置到缺省的安装设置(这只不过是另一个常规的.vssettings文件)。

       读到这,你可能考虑在你的团队中让专人创建一个主.vssettings文件接着把它e-mail给你的团队成员以便他们能单独导入设置。到这,这个特性还有另一个应用。简单地创建一个.vssettings文件接着把它放在局域网上一个众所周知的位置共享。然后请求每个开发者到工具>选项>环境>导入>导出设置>团队设置。在这他们知心朋友转向跟踪团队设置文件并指向共享的.vssettings文件。下一次当他们启动IDE时,会探测文件并导入它。这个特性的好传奇中就是另一个值得信任的团队领导能导出共享的.vssettings文件并覆盖它,以便每个开发者的IDE都将探测到改变在下一次启动时导入。

关闭所有的其它窗口

       当你开发你的程序时让许多文件同时打开并不常见。在工作一段时间后,你可能有许多文件打开,想关闭除了你正在工作的文件之外的所有其它文件。在以前的VS.NET版本中,你必须把它们全部关闭通过窗口>关闭所有文档接着打开你想工作的文件。

       VS.NET2005允许你在任意的文件Tab页上右击,从弹出的菜单上选择除此之外全部关闭,确实就想它说的那样工作(见图84)。对VS.NET2005来说是新的菜单选项包括打开所在的文件夹,会打开Windows资源管理器并打开你的文件所在的文件夹;和拷贝完整路径,会拷贝选择的文件的完整路径到剪切板。

 

84      关闭所有的其它窗口

显示所有按钮的快捷键

       我强烈拥护使用快捷键,只要它们是可用的。键盘快捷键证明比移动鼠标要快的多。许多VS.NET菜单和子菜单都会有一个相应的键盘快捷键,每一次你点击菜单项是地,你都会被提示相应的快捷键。可能下一次你就不再会使用菜单了。

       对工具条上的按钮这个提示也有。选择工具>自定义,选择工具栏上的屏幕提示和在屏幕提示上显示快捷键。现在当你移到鼠标到一个按钮上时,如果有的话,稍微延缓以后工具提示窗口就会出现显示按钮的键盘快捷键。

生成所选择的项目子集

       VS.NET2005中的生成菜单显示了几个你能采用的动作。除了常规的生成和重新生成动作外,还有新的发布(对ClickOnce技术)和清除动作,你现在能选择只生成解决方案中选择的项目子集。

       当你作一个常规的生成时,通常VS.NET是足够聪明地知道那个项目发生了变化。但是,有时你想强迫几个别的项目重新生成。在VS.NET2005之前,只有使用重新生成所有,如果你的解决方案包含许多项目的话,这个操作是相当耗时的。用VS.NET2005,你现在能显亮几个项目(要么在选择单个项目时按Ctrl键,要么按Shift键作一个持续的选择,如同在Windows资源管理器中一样)。一旦你显亮的几个项目,再到生成菜单。现在通常的单个项目菜单已经让能应用到所选择的项目的菜单替换了:生成选择,重新生成选择,清除选择,发布选择(见图85)。

 

85      在选择多个项目后生成菜单发生改变

VB.NET中使用编辑继续功能

       VS.NET20022003,一个最大的抱怨就是它们不再支持VB.NET的编辑继续功能。VB6(在VS.NET之前对于VB开发者的主要的IDE)允许开发者在运行高度状态下修改代码,VB6得到代码的改变并没有重新启动程序就可以执行。这个有用的特性在VS.NET20022003中消失了,已经在VS.NET2005返回。在断点满足条件时,简单地修改代码,你将看到VS.NET使用新的代码执行。

注意:这个特性不能应用于C#

在调试过程中扩展变量成员

       以前的VS.NET版本允许你在调试时移动你的鼠标到变量名字上,得到你的变量的 字符串展现。这是一个重要的特性,但是,对于定制的类如果你没有重载ToString()方法r的话,这个特性就不起作用了。VS.NET2005改善了这个特性,允许你扩展你的变量信息和深入到你的变量的内部成员。当你移动鼠标到一个实的实例(或类型),你现在能点击加号看你的实例的内部成员。你甚至能扩展内容类成员变量。

 

86      扩展变量成员

使用数据可视化

       调试时移动鼠标到对象时,除了能扩展对象外,VS.NET2005对难于以纯字符格式显示的变量类型提供了相当有用的数据可视化窗口。例如,移动你的鼠标到一个DataSetDataTable上,能在变量值的右边看到一个小的放大镜的图标。点击放大镜得到下拉菜单能看到对于你的数据的不同的观察仪(见图87)。对于DataSetDataTable,单个观察仪以表格格式显示数据(见图88)。在调试和向下钻取每行列时比在VS.NET20022003下确实是容易的。

 

87      点击放大镜选择数据观察仪

88      DataSetDataTable的数据可视化

       也有另的内置的数据可视化。当移动鼠标到字符串上时,你能从三种数据观察仪中选择。文本观察仪简单地显示有自动折叠格式的长的字符串。XML观察仪以分等级的表单显示包含XML片断的字符串(如同在IE中查看一个XML文件一样)。HTML观察仪解析字符串,重新绘制数据成一个小的Web页面。

       除了点击放大镜(提示你从可用的观察仪中选择)旁边的下拉图标外,你能点击放大镜本身,它会自动选择你的特定的数据类型最后一次选择的观察仪。

posted on 2006-11-02 10:45  漂泊者  阅读(2455)  评论(6编辑  收藏  举报

导航