VB.NET从语法上扩展了VB6,具有VB6不可具备的优点。从本质上来说VB6是积木式的编程方式,语法上不是一个大型软件语言,是对象语言但不是面向对象的语言,但其与COM和API的良好结合,使得这个语言的应用变得极为广泛。我们为什么要从VB6转向VB.NET,现代软件由于规模庞大,往往不得不采用面向对象的方式来设计软件,一种语言或多或少都是具有面向对象的特性和面向过程的特性,纯粹面向对象和面向过程的语言都十分难以控制。比如我们用C语言来编写一个软件,C语言也可以调用Win32 API函数,也可以调用COM,但就是觉得很麻烦,因为他对对象的支持太少。VB6也很简单,用起来十分方便,但如果你写的软件需要十个窗体,每个窗体都大同小异,那么你就会觉得很枯燥,老是重复写一些东西,尽管你觉得很简单,把控件拖上去,写不了几行代码就完成了,但如果要你做十变,你是不是觉得很浪费?
面向对象的语言其实并不复杂,只要具备3个条件就行了,一是封装性,这是面向对象最基本的功能,其实就是private,public这些玩意,如果是私有的,外面就不能访问,如果是公共的,就允许外面访问,这样我们就很好的控制对象的一些属性,防止一些意外发生,并与其他对象进行联系。二是继承,这是面向对象语言的一个重要的功能,只有能够继承才实现了对象代码的可复用。我们写了一个对象,另外一个对象跟他相似,那我们继承一下就好了,不用多写很多重复的代码。三是多态性,这是面向对象的最灵活的一个特性,同样的函数,调用的方式不同,调用的参数不同,就实现不同的功能。
从上面的3个特性来看C语言一个都不具备,VB6具备第一个,但剩下的2个不具备,一个语言可能具备面向对象的特性,但并不意味着我们用了面向对象的语言就实现了面向对象的编程,比如你用C++写一个很简单的算法程序,根本用不着上面的特性,即使你用了上面的特性,也并不意味着你就掌握了OOP了,但我们不必要在这个上面绕弯子,只要我们自己觉得好就行,一切从实际出发,如果用VB6能实现就用VB6实现,没什么不可以。
从我的看法来讲,将来还会有语言向VB6这方面的发展,但可能更高级。谁也说不好,不能说这种模式就是不好的。总有一点,目前这种情况下,VB6写游戏是比较困难的。
很多人总觉得VB6很好用,VC多难啊,是的,但这是在VB.NET出来以前。VB.NET具有了上面说的3个特点,等会我给个例子,用VB.NET的,根本就没用到上面的特性,但如果你进行扩展,就会发现VB.NET原来这么好用。
VB.NET是。NET语言的一种,他也有托管代码和非托管代码2种。非托管代码,编写出来的就跟VC一样,编写的时候,你也可以用API函数,直接使用COM,也可以使用。NET Framework。托管代码,你只能使用。NET Framework,尽管还不是很完善,但已经能够满足绝大部分需求了,但有一点就是执行的时候,它是本地代码,这一点要比VB6的半解释型代码快。而且VB.NET的执行效率和编译效率还在不断提高。
首先一点,我用过6年的VB,我没学过VB.NET,为了写这个例子,我临时学了一点。不对的地方大家指出一起讨论。
VB6和VB.NET语法上的不同
1、有了继承Inherits,我想这一点,一般人能够理解没什么难度,我们写了一个类,继承它就可以直接调用里面的函数。对于多重继承,不要理解的太复杂,一般用不着的,反正多重继承出错了,编译没法通过,改一下就好了,我也不知道VB.NET的多重继承是怎么规定的。
2、有了重载,同一个函数名可以有多种表现和不同的参数,这也好理解
3、委托,这个比较别扭,大家慢慢意会一下,其实很简单,委托就是一种变量类型,这种变量类型是指向一个函数的,比如我们有个函数A想调用另外一个函数,但是不知道函数名,为什么不知道,因为我们还没定义这个函数,经常我们在游戏引擎写了一个函数,比如一个动画放完了,我们想通知用我们引擎的人,怎么办?调用它的一个函数,但是我们引擎还没写好,怎么知道用我们引擎的人写的是个什么函数,没关系,我们定义一个委托类型,调用这个委托就可以了,等引擎写好了,开发者在用我们的引擎的时候,一看这里有个委托,就定义他的函数,然后把这个函数通过委托类型传递进引擎就可以了。
这样说不知道大家明白没有。大家去看看MSDN例子,很详细的。(我还不会用哈哈,所以我没有例子)
4、New,这个关键字在VB6中间也有,但是VB.NET中更接近本来的意思,以前我们在VB6中定义一个变量,自己就有了默认的初始化函数,现在我们通过New能够调用构造函数来实例化一个对象。
5、VB.NET和其他的。NET语言一样,不允许有全局的独立函数,所有的函数都必须在类里面,其实这一点并没有太多的问题,只是理解起来别扭一点而已。VB里面定义一个全局的函数用Shared修饰,凡是用Shared修饰的函数,我们不需要New类的实例就可以调用,比如:
Public Class A
Shared a As Integer
Public Dim b As Integer
Public Shared Sub f()
a = 10
End Sub
End Class
我们调用的时候只要A.f()就可以了,不需要定义A的实例,但是如果我们访问b变量,不能A.b,必须定义一个实例,比如:
Dim va As New A
va.b = 10
但我们同样不能va.f(),这样没有意义。
同时,我们在过程f里不能访问变量b,这也很好理解,因为f是全局的,他实例化的时候,b还没有定义呢。
那么关于VB.NET的语法我就说到这里,其实稍微理解以下就够用了,等到实际用的时候,再去慢慢查资料慢慢理解,还是比较容易的,因为大部分都是我们熟悉的。