以前在学校时,编写代码都是使用C#,习惯了C#的代码习惯,等工作后由于工作需要逐渐的开始采用了VB.NET开发项目,渐渐地喜欢上了VB.NET,现在我就罗列一些VB.NET加速代码开发的方法。
一、智能感知
做.NET开发的许多人都知道作为微软.NET中2大语言VB.NET和C#,VB.NET在智能感知上比C#强上许多,
1、自动补完,在VB.NET中如果输入VB.NET关键字,当敲击enter后,VS会自动帮助你补完剩余的代码
比如:输入try等后敲击enter,VB.NET会自动生成
Try Catch ex As Exception End Try这样程序员就可以不必再输入catch代码,可以直接编写业务逻辑代码(VB.NET中的关键字都会有类似效果,大家有兴趣可以自己尝试)
当然在C#中也可以通过Snippets来完成,但是C#的Snippets大大少于VB.NET,从下图中就可以看出
VB.NET
C#
2、代码自动格式化
在VB.NET中只要敲击enter就会自动对当前文档格式化,无需像C#中需要手动Ctrl+K,Ctrl+F(虽然在C#中写完一段代码VS也会自动格式化但是效果远远比不上VB.NET),这种自动格式化,减少了在书写代码过程中的许多工作量,而且如果碰上一个不喜欢格式化代码的人,VB.NET可以自动帮助格式化,这样后面的人来阅读代码会更加方便。
3、智能感知
在.NET3.5中,添加了linq,我们会经常书写这样的代码,如:
VB.NET
C#
从上图我们可以清楚的看到,VB.NET可以从LINQ语句中自动推断出linq变量的类型,而C#却不行,当我们在书写复杂的LINQ语句时,这种提示是很有用的,而且在foreach等遍历对象时,VB.NET基本上都能自动推断出变量的类型,但是C#不行必须程序员手动的给变量指定类型。
同时,在VB.NET中,还有个好处就是不区分大小写,例如:我们在做ASP.NET开发时由于某些情况下是没有智能感知提示的所以经常需要靠记忆力来书写代码,像在页面中写javascript书写:
var txt=document.getElementById(“<%=Text1.ClientID%>”);来获取文本框的客户端ID,在C#中必须书写Text1.ClientID否则会报错,而VB.NET则可以写成Text1.ClientId。
又比如,在C#编写过程中我们都会要书写using System;来引用命名空间,但是此时如果你直接写using system.这时按“.”智能提示将不会有任何提示,应为system的首字母为小写,必须要将原有的system删除,书写正确的首字母大写的System才行,这种智能感知无法正常提示的情况在C#很常见(当然在VS2010中已经被很好的优化了),而VB.NET就不会出现这样的问题,你在书写的每一步无论你书写大小都能被正确的识别
当然这种智能感知还体现在VB.NET的许多方面。
4、命名空间导入
在C#开发中有件很令我痛苦的就是命名空间导入,每当我新建一个类时我可能就需要重复导入命名空间,这样一个项目下来上百个类得重复导入很多命名空间。而VB.NET则很好的解决了这个问题,当你新建一个VB.NET类或模块,会发现这个类很干净:
Public Class A End Class仅仅只有类的定义,没有像C#那样默认导入了几个必备的命名空间,如System,System.Text等,这是因为VB.NET在建立项目的同时已经帮助你引用好了,winform项目可以通过查看项目属性引用中查看 在asp.net可以在web.config中查看到:<pages enableSessionState="true"> <namespaces> <clear/> <add namespace="System"/> <add namespace="System.Collections"/> <add namespace="System.Collections.Generic"/> <add namespace="System.Collections.Specialized"/> <add namespace="System.Configuration"/> <add namespace="System.Text"/> <add namespace="System.Text.RegularExpressions"/> <add namespace="System.Linq"/> <add namespace="System.Xml.Linq"/> <add namespace="System.Web"/> <add namespace="System.Web.Caching"/> <add namespace="System.Web.SessionState"/> <add namespace="System.Web.Security"/> <add namespace="System.Web.Profile"/> <add namespace="System.Web.UI"/> <add namespace="System.Web.UI.WebControls"/> <add namespace="System.Web.UI.WebControls.WebParts"/> <add namespace="System.Web.UI.HtmlControls"/> </namespace> <pages>同时你也可以在这引用一些项目共用的命名空间。
二、特性语法,与C#之对比
介绍了VB.NET的一些智能感知特性后,现在我就对VB.NET在特性语法上和C#进行比较
1、代码结尾
VB.NET有个最大的好处,在默认情况下VB.NET换行则表示一行代码的结束,不必想C#一样书写“;”来表示,从某种程度上来说可以稍微提高一些代码的编写速度
2、匿名类型
.NET3.0开始,C#引入了var关键字,这样方便了程序员在定义变量时的麻烦,相对应的VB.NET也有Dim关键字。
在C#中如果要建立一个匿名类型:
var people = new { name = "kyo", age = 22 };VB.NET的写法:
Dim people = New With { .name="kyo", .age = 22 }
3、XML
在VB.NET9.0发布的时候,VB.NET的XML编写方式使程序员们眼前一亮,在程序中也可以像普通编写XML一样简单,并且可以以编程的形式进行XML操作,我们现在来对比下VB.NET和C#书写XML的方式
VB.NET:
Dim xml = <peoples> <people> <name>kyo</name> <age>22</age> </people> </peoples>C#:
var xml = new XElement("peoples", new XElement("people", new XElement("name","kyo"), new XElement("age",22)) );可以看出VB.NET的书写方式完整的实现了XML的结构,一眼就能看明白,而C#则需要靠良好的格式化才能看的出来。
再看一段MSDN中的VB.NET的XML操作例子:
\' Place Imports statements at the top of your program. Imports <xmlns:ns="http://SomeNamespace"> Module Sample1 Sub SampleTransform() \' Create test by using a global XML namespace prefix. Dim contact = _ <ns:contact> <ns:name>Patrick Hines</ns:name> <ns:phone ns:type="home">206-555-0144</ns:phone> <ns:phone ns:type="work">425-555-0145</ns:phone> </ns:contact> Dim phoneTypes = _ <phoneTypes> <%= From phone In contact.<ns:phone> _ Select <type><%= phone.@ns:type %></type> _ %> </phoneTypes> Console.WriteLine(phoneTypes) End Sub End Module这段代码实现的效果是查询输出contact中所有的phone的类型。具体的原理大家可以查看MSDN,MSDN中已经写的很详细了。
4、可选参数,可选实参
在现有的VB.NET已经拥有了可选参数,可选实参这2个特性,而C#在4.0才加入:
VB.NET:
可选参数:
Public Sub SubA(ByVal a As String, Optional ByVal b As Integer = 0) a = b.ToString() SubA("kyo") SubA("kyo", 2) End Sub可选实参:
SubA(a:="kyo", b:=2)C#:
可选参数:
public void A(string a, int b = 0){A(“kyo”);A(“kyo”,2);
}可选实参:A(a:"kyo",b:2);
5、语法可读性
在对比了C#和VB.NET的关键字,已经在日常的使用中,我觉得VB.NET的语法更加接近人类的自然语言,可读性也比较强。大家可以从MSDN中对比下VB.NET和C#的关键字,会发现VB.NET的关键字虽然啰嗦了点,但是更加能让人读懂,具体的比较,大家可以从这里查看VB.NET关键字和C#关键字
三、VB.NET的不足
说了那么多VB.NET的好处,现在来说说VB.NET的不足,而且这些不足我个人认为也是比较令人不舒服的:
1、代码着色
C#的代码着色在看的时候令人非常的舒服,各种类型,各种关键字都是用不同的颜色给区分出来,让人一看就知道什么是什么,而VB.NET这点就做的比较糟糕了,整个代码就3种颜色(除去XML编程的颜色)关键字的蓝色,普通代码的黑色和字符串的红色
VB.NET:
C#:
大家对比下就能看出了吧!
2、代码结构
在C#中代码的开始结束都是使用“{}”来表示,看上去非常的简洁,而VB.NET却比较啰嗦了,比如一个方法是sub开始,end sub结束,少的时候还可以接受一旦多了整个代码就感觉太啰嗦了(幸好VB.NET的自动格式化做的非常好)
VB.NET还有个硬伤就是#region代码折叠,在C#中#region可以出现在任何地方,可以把任何需要折叠的代码折叠起来可以在方法体内,也可以在方法外,而VB.NET不行,#region必须是在方法外,只能将方法折叠,不能将方法内的代码折叠,这样如果一个方法体内的代码比较长,这样就无法进行分段折叠了。
四、VB.NET 10.0
VB.NET10.0已经发布了,这次的10改动也是非常的巨大,融合了C#许多3.0的优点,让人心动不已。
1、自动属性
在10.0以前,VB.NET写属性都非常费劲,例如:
Private newPropertyValue As String Public Property NewProperty() As String Get Return newPropertyValue End Get Set(ByVal value As String) newPropertyValue = value End Set End Property
虽然可以通过来Snippets来减少输入,但是还是比较麻烦,但是在10.0中引入了自动属性,和C#3.0一样,只需1行就可以完成:
Public Property A As String = ""
2、隐式换行
书写VB.NET有个比较痛苦的事就是,因为VB.NET是以回车符来表示一行代码结束,但是有时代码太长需要分几行来写以方便阅读,在每行的结尾都需要写“_”来表示换行,这样有时忘写就会报错,但是在10.0中取消了这个该死的“_”,可以直接换行,这样书写代码时就无需考虑换行因素了。
3、局部方法、局部函数
.NET3.0中,引入了lambda表达式,C#可以通过“=>”来表示,而VB.NET则需要通过function(x) code来表示,这样就大大的局限了VB.NET的lambda表达式,因为Function(x)表示一个函数必须有返回值,这样Action<T>在VB.NET中就无法通过lambda表达式使用。而10.0中则新增了局部方法、局部函数:
dim action=sub() end sub dim func=function() end function
这样VB.NET的lambda表达式功能才算真正的完善
至此本文就已经结束了,虽然只是介绍了一些VB.NET的基本一些特点,还有很多很多VB.NET有特色的东西没讲到。比如My关键字、隐式转换、CInt(CXX)转换,Microsoft.VisualBasic命名空间等等,具体的还是要大家在日常的使用中去研究,希望大家能真正喜欢上VB.NET。
本文如有不好请见谅,因为本人还是一个菜鸟。