使用VB.NET加快代码开发速度
以前在学校时,编写代码都是使用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会自动生成
12345Try
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书写:
1var
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类或模块,会发现这个类很干净:
仅仅只有类的定义,没有像C#那样默认导入了几个必备的命名空间,如System,System.Text等,这是因为VB.NET在建立项目的同时已经帮助你引用好了,winform项目可以通过查看项目属性引用中查看
123Public
Class
A
End
Class
在asp.net可以在web.config中查看到:
同时你也可以在这引用一些项目共用的命名空间。
1234567891011121314151617181920212223<
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#中如果要建立一个匿名类型:
1var
people =
new
{ name =
"kyo"
, age = 22 };
VB.NET的写法:
1Dim people = New With { .name=
"kyo"
, .age = 22 }
3、XML
在VB.NET9.0发布的时候,VB.NET的XML编写方式使程序员们眼前一亮,在程序中也可以像普通编写XML一样简单,并且可以以编程的形式进行XML操作,我们现在来对比下VB.NET和C#书写XML的方式
VB.NET:
123456Dim
xml = <peoples>
<people>
<name>kyo</name>
<age>22</age>
</people>
</peoples>
C#:
12345var
xml =
new
XElement(
"peoples"
,
new
XElement(
"people"
,
new
XElement(
"name"
,
"kyo"
),
new
XElement(
"age"
,22))
);
1可以看出VB.NET的书写方式完整的实现了XML的结构,一眼就能看明白,而C#则需要靠良好的格式化才能看的出来。
再看一段MSDN中的VB.NET的XML操作例子:
123456789101112131415161718192021222324252627' 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
1这段代码实现的效果是查询输出contact中所有的phone的类型。具体的原理大家可以查看MSDN,MSDN中已经写的很详细了。
1
4、可选参数,可选实参
在现有的VB.NET已经拥有了可选参数,可选实参这2个特性,而C#在4.0才加入:
VB.NET:
可选参数:
123456Public
Sub
SubA(
ByVal
a
As
String
,
Optional
ByVal
b
As
Integer
= 0)
a = b.ToString()
SubA(
"kyo"
)
SubA(
"kyo"
, 2)
End
Sub
可选实参:
1SubA(a:=
"kyo"
, b:=2)
C#:
可选参数:
1public
void
A(
string
a,
int
b = 0)
1{
1A(“kyo”);
1A(“kyo”,2);<br>}
1可选实参:
1A(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写属性都非常费劲,例如:
123456789Private
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行就可以完成:
1Public
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中则新增了局部方法、局部函数:
1234dim action=sub()
end sub
dim func=function()
end function
这样VB.NET的lambda表达式功能才算真正的完善
至此本文就已经结束了,虽然只是介绍了一些VB.NET的基本一些特点,还有很多很多VB.NET有特色的东西没讲到。比如My关键字、隐式转换、CInt(CXX)转换,Microsoft.VisualBasic命名空间等等,具体的还是要大家在日常的使用中去研究,希望大家能真正喜欢上VB.NET。
本文如有不好请见谅,因为本人还是一个菜鸟。
本文转自kyo-yo博客园博客,原文链接:http://www.cnblogs.com/kyo-yo/archive/2010/05/12/Quick-Programming-using-VB.html,如需转载请自行联系原作者
相关文章:

技术图文:举例详解Python中 split() 函数的使用方法
背景 这篇文章主要介绍Python中的split()函数的使用方法,split()函数通常用于将字符串切片并转换为列表,需要的朋友可以参考一下。 技术分析 Python中有split()和os.path.split()两个函数,具体作用如下: split():拆…

Burning
转载于:https://www.cnblogs.com/kuiyuan/archive/2011/09/02/2163621.html

UI设计工作好找吗?有哪些面试技巧?
最近有很多学习UI设计的学员,想要了解UI设计学成之后是否好找工作?对于后期的面试有哪些技巧?下面小编整理的这些希望可以帮助到大家,来看看下面的详细介绍。 UI设计工作好找吗?有哪些面试技巧? 作品:很多初级小白的问题所在就是缺少大量…

刻意练习:Python基础 -- Task10. 类与对象
背景 我们准备利用17天时间,将 “Python基础的刻意练习” 分为如下任务: Task01:变量、运算符与数据类型(1day)Task02:条件与循环(1day)Task03:列表与元组(…

CentOS 7更新时出现Multilib version problems
这两天在更新CentOS7系统时,出现了Multilib version problems错误,执行命令: # yum update 出现了的错误信息: .... ---> Package libcap-ng.i686 0:0.7.5-4.el7 will be installed ---> Package libstdc.i686 0:4.8.5-16.e…

HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求。...
把以下内容加在web.config的<system.webServer>节点 <security><requestFiltering ><requestLimits maxAllowedContentLength"1024000000" ></requestLimits></requestFiltering></security> 上述中maxAllowedContentLeng…

APP自动化测试过程概述
对于Android App的自动化测试框架的使用,其实在很多书上面都会有说明,我们可以先来看一个常用的自动化测试实例,先不说框架,主要是测试用户操作的模拟、执行结果的判断,以便获得对测试自动化的理解与认识。 案例需求如…

MFC最小化到系统托盘
在VC中,想实现将MFC最小化到系统托盘,需要调用NOTIFYICONDATA类,并注册相应的消息,以下详细讲解如何实现: 第一步,声明一个NOTIFYICONDATA类,也就是NOTIFYICONDATA NotifyIcon;该句可以放在Dlg类…

资料分享:推荐一本《简单粗暴TensorFlow 2.0》开源电子书!
背景 本开源电子书是一篇精简的 TensorFlow 2.0 入门指导,基于 TensorFlow 的 Eager Execution(动态图)模式,力图让具备一定机器学习及 Python 基础的开发者们快速上手 TensorFlow 2.0。 本开源电子书的所有代码基于 TensorFlow…

JS设计模式-观察者模式
观察者(又称发布订阅)模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。原文链接 应用场景 当用户在网页执行一些操作(如点击)后就需要执行…

如何理解JS的单线程?
JS本质是单线程的。也就是说,它并不能像JAVA语言那样,两个线程并发执行。 但我们平时看到的JS,分明是可以同时运作很多任务的,这又是怎么回事呢? 首先,JS的代码,大致分为两类,同步代码和异步代…

Fedora 14下安装使用rarlinux
安装Fedora 14后,其默认情况下不能解压RAR文档,因为系统自带的解压软件不支持RAR格式文档,但由于经常要用到RAR文档,因此就必须安装一个RAR软件。Linux版的RAR下载链接: http://www.rarlab.com/download.htm 以rarlinu…

技术图文:如何利用 Python 做一个简单的定时器类?
背景 今天在B站上看有关 Python 最火的一个教学视频,零基础入门学习 Python,这也是我们 Python基础刻意练习活动 的推荐视频教程。 在学习魔法方法的时候,有一节视频是制作一个简单的定时器,基本要求如下: 定制一个计…

20、C#里面方法的创建和显示
在C#里面,和Java也是一样的,都是可以创建方法的。这里所说的方法,就是其它编程语言里面的函数、子程序、过程等。创建的方法有两种:一种是没有返回值的方法。一种是有返回值的方法。无论是哪种方法,其实都是很简单的。…

优秀的Java程序员应具备哪些编程技术?
想要成为一名合格的java程序猿,需要学习的知识是有很多的,但是基础知识一定要非常牢固,基础不牢固的程序员,随时都会被新的知识和技术所淘汰,下盘不稳风一吹就倒,那么具体作为一个优秀的Java程序员应具备哪…

asp.net 后台事件掉用前台js
在下面的例子中,我们在一个 .aspx 文件中声明了一个 TextBox 控件和一个 Label 控件。当您更改了 TextBox 中的值,并且在 TextBox 外单击时,change 子例程就会被执行。change 子例程会向 Label 控件写一条文本: <script runat&…

Android -- 利用Broadcast开启Service
Broadcast和Service都是Android四大组建之一的。 这里的广播是动态的,自己注册的一个广播。 这种最典型的用法就是利用开机广播,然后再起自己的服务,也就是在Android手机中做到开启启动。 Service与Broadcast …

资料分享:推荐一本《李宏毅机器学习》开源电子书!
背景 今天在 github 上看到了 datawhale 发布的 李宏毅机器学习笔记。 https://datawhalechina.github.io/leeml-notes 其目录如下: P1 机器学习介绍P2 为什么要学习机器学习P3 回归P4 回归-演示P5 误差从哪来?P6 梯度下降P7 梯度下降(用…

Python 中常见的配置文件写法
相信学习Python或者正在进行Python工作的小伙伴都会有一个疑问,为什么要写配置文件呢?在开发过程中,我们常常会用到一些固定参数或者是常量。对于这些较为固定且常用到的部分,往往会将其写到一个固定文件中,避免在不同的模块代码…

技术图文:Python描述符 (descriptor) 详解
背景 今天在B站上学习“零基础入门学习Python”这门课程的第46讲“魔法方法:描述符”,这也是我们组织的 Python基础刻意练习活动 的学习任务,其中有这样的一个题目。 练习要求: 先定义一个温度类,然后定义两个描述符…

[转]自定义hadoop map/reduce输入文件切割InputFormat
本文转载自:http://hi.baidu.com/lzpsky/blog/item/99d58738b08a68e7b311c70d.html hadoop会对原始输入文件进行文件切割,然后把每个split传入mapper程序中进行处理,FileInputFormat是所有以文件作 为数据源的InputFormat实现的基类&…

使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型...
from:http://www.freebuf.com/articles/network/139697.html DGA(域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检测的技术手段。例如,一个由Cryptolocker创建的DGA生成域xeogrhxquuubt.com,如…

学习Python开发培训有用吗
学习Python开发培训有用吗?这是目前很多人都比较关注的一个问题,Python语言在最近几年是广受IT互联网行业关注的, 下面我们就针对这问题来详细的分析一下。 学习Python开发培训有用吗?Python是被广泛使用的高级编程语言,Python解释器本身几…

Web性能优化实践——应用层性能优化
随着公司项目的进一步推广,用户数量的增加,已经面临着单台服务器不能负载的问题。 这次的优化由于时间关系主要分两步走,首先优化应用层代码以提高单台服务器的负载和吞吐率。之后再进行分表,引入队列、MemCached等分布式应用。 项…

技术图文:Python魔法方法之属性访问详解
背景 今天在B站学习“零基础入门学习 Python”中的第45节“魔法方法:属性访问”,这也是我们组织的 Python基础刻意练习活动 的学习任务,其中有这样的一个题目。 练习要求: 写一个矩形类,默认有宽和高两个属性。如果…

chmod权限设置
drwxr-xr-x. 7 root root 4096 Sep 26 20:16 sysconfig-rw-r--r--. 1 root root 1150 Aug 31 18:46 sysctl.conflrwxrwxrwx. 1 root root 14 Aug 31 17:21 system-release -> centos-release例如:-rw-r--r--第一个代表文件类型:-普通文件:…

【Python培训基础】一篇文件教你py文件打包成exe
场景: 如果要将我们编写好的代码给别人使用,如果要他们直接使用我们的代码,就需要安装各种编译软件以及第三方模块,还要对软件操作,编程有一定的了解,这对使用者的要求比较高,不是很方便,为了解决这一问题,我们可以选择将我们编写的代码,编译成一个可执行文件,这样,就可以实现跨…

刻意练习:Python基础 -- Task06. 字典与集合
背景 我们准备利用17天时间,将 “Python基础的刻意练习” 分为如下任务: Task01:变量、运算符与数据类型(1day)Task02:条件与循环(1day)Task03:列表与元组(…

WCF - Session 剖析
WCF中的Session WCF是MS基于SOA建立的一套在分布式环境中各个相对独立系统进行通信的构架,实现了最新的基于WS-*规范。按照SOA的原则,相对独自的业务逻辑以service的形式封装,调用者通过Messaging的方式调用Service。对于承载着某个业务功能的…

mui 微信支付 与springMVC服务器交互
昨天搞定了微信支付,没有想象中的难,主要是官方的demo不全好多东西要自己琢磨,mui端的就不写了支付宝的有了一模一样.上java端的首先是jar包 一个是用来解析xml文件 一个是用来解析json 当然可以替代 然后是工具类当然并不是全都用的到. public class ConfigUtil { /** * 服务…