VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • 从VB到VB.NET——VB6程序员如何转向.NET(5)


继承

继承是面向对象编程语言中最常用的技术。继承让你能够重用类代码和功能。

VB.NET支持继承,而VB6.0则不支持。继承的好处在于你能使用任何人编写的类,从这些类派生自己的类,然后在自己的类中调用父类功能。在下面的例子中,Class B派生自Class A,我们将从Class B中调用Class A的方法MethodA
 

Imports System

Imports System.Console

 

Module Module1

    Sub Main()

        Dim bObj As B = New B

        WriteLine(bObj.MethodA())

    End Sub

End Module

 

' Class A defined

Public Class A

    Function MethodA() As String

        Return "Method A is called."

    End Function

End Class

 

'Class B, inherited from Class A. All members (Public and Protected)

' can be access via B now.

 

Public Class B

    Inherits A

    Function MethodB() As String

        Return "Method B is called."

    End Function

End Class


可以从一个class中派生多个自定义class,也可以从多个class派生一个自定义class


共享的成员

类的共享成员被类的所有实体共享。共享成员可能是属性、方法或字段/值域。在你不想让用户全面控制自己的类时,共享成员相当有用。例如,你可以开发一个类库,让用户通过共享成员使用其中的部分功能。

 

可以通过class本身引用共享成员,而无需通过类的实体。例如:

Module Module1

    Sub Main()

        WriteLine(A.MethodA())

    End Sub

End Module

 

' Class A defined

Public Class A

    Shared Function MethodA() As String

        Return "Method A is called."

    End Function

End Class



多线程

VB语言的一大弱点就是缺乏编写自由线程(free-threaded)程序的能力。在.NET Framework中,所有语言共享CRLCommon Runtime Library,公共运行库),也就是说,你可以用VB.NETC#或其它.NET语言编写同样的程序。


System.Threading namespace定义了线程类。我们只需要引入System.Threading namespace,即可使用线程类。


System.Threading.Thread类提供线程对象,可以使用Thread类创建或破坏线程。


创建线程

使用Thread类的实体创建一个新线程,然后用Thread.Start方法开始执行线程。线程构造器接受一个参数,该参数指明你要在线程中执行的procedure。在下例中,我想在oThread1Thread类的一个实体)的第二线程中执行SecondThread过程:


oThread1 = New Thread(AddressOf SecondThread)

SecondThread procedure looks like below:

Public Sub SecondThread()

    Dim i As Integer

    For i = 1 To 10

        Console.WriteLine(i.ToString())

    Next

End Sub
 

然后,调用Thread.Start()开始线程:
 

oThread1.Start()

 

下面的代码创建两个第二线程:

 

Imports System

Imports System.Threading

 

Module Module1

    Public oThread1 As Thread

    Public oThread2 As Thread

 

    Sub Main()

        oThread1 = New Thread(AddressOf SecondThread)

        oThread2 = New Thread(AddressOf ThirdThread)

        oThread1.Start()

        oThread2.Start()

    End Sub

 

    Public Sub SecondThread()

        Dim i As Integer

        For i = 1 To 10

            Console.WriteLine(i.ToString())

        Next

    End Sub

 

    Public Sub ThirdThread()

        Dim i As Integer

        For i = 1 To 10

            Console.WriteLine("A" + i.ToString())

        Next

    End Sub

End Module



破坏线程 

调用Abort方法来破坏(中止)一个线程。在调用Abort之前,确保用IsAlive判断线程处于活动状态。


If oThread1.IsAlive Then

  oThread1.Abort()

End If



暂停线程

可以使用Sleep方法来暂停线程执行。Sleep方法接受一个以毫秒为单位的参数,指明线程应当暂停多长时间。

 

下面的例子让线程暂停1秒钟:


oThread2.Sleep(1000)

你也可以使用SuspendResume方法来挂起和继续线程执行。



设定线程优先级

Thread类的Priority属性用于设定线程优先级。该属性可以设置为NormalAboveNormalBelowNormalHighestLowest。如:


oThread2.Priority = ThreadPriority.Highest

线程与Apartment

使用ApartmentState属性设置线程的apartment类型,该属性值可以为STAMTA或是Unknown[2]


oThread.ApartmentState = ApartmentState.MTA

MTS
意味着可以使用多线程模式,而STA则只能是单线程执行。


Public Enum ApartmentState

{

STA = 0,

MTA = 1,

Unknown = 2,

}


1.8 结构化异常处理
异常处理也被称之为错误处理。作为VB程序员,你一定对On Error GotoOn Error Resume Next这些VB6.0错误处理语句耳熟能详。这种类型的错误处理被称为非结构化异常处理(Unstructured Exception Handling)。而在VB.NET中,Microsoft推出了结构化异常处理机制。VB.NET支持类似C++TryCatch..Finally控制。Try..Catch..Finally结构如下:
 
Try

可能导致异常的代码

Catch

当异常发生时处理异常的代码

Finally

清理现场

End Try

 

Try语句块用以抛出异常。如果异常发生,在Catch语句块中处理。Finally语句块是可选的,在需要释放资源时特别有用。



1.9 VB6.0VB.NET的不同之处

除了上面谈到的语言进化,还有一些语法上的变化。所有这些语言和语法的变化在MSDN中均可查到,本文只作简单介绍。



数据类型(Data Type)的改变

VB.NET中有些数据类型得到改进。下面是变化对照表。



 

数据类型

VB6.0

VB.NET

Integer

16 bit size

32 bit size

Long

32 bit size

64 bit size

Currency

用于存储大浮点数

decimal替代,支持更高精度

Variant

可以存储任意类型数据

Object类型替代,也可以存储任意类型数据,但结果更好

Date

Date类型被存储为double

引入DateTime类型,用于存储不同格式的日期


VB.NET中,Short数据类型是16 bit的。ShortIntegerLong都等同于CLRSystem.Int16System.Int32System.Int64类型。
 

变量声明的变化

VB6.0中,变量声明有许多限制。其中之一就是不能同行声明多个变量。如果一定要在一行中声明多个变量,就一定得指明每个变量的类型,否则将被默认为Variant类型。


Dim a1, a2 As Integer 
Dim a3 As Integer, a4 As Integer 


第一行中的a1Variant类型,a2Integer类型。第二行中两个变量都是Integer类型。

VB.NET支持同行声明多个变量,举例如下:


Dim a1, a2, a3 As Integer 

变量初始化是另一个问题。在VB6.0中不能同时声明和初始化变量,而VB.NET则支持这个特性。


Dim name As String = "Mahesh"
System.Console.Write(name) 


声明常量也可以照此办理:

Const DT_COUNT As Integer = 23 

New
关键字。在VB.NET中,New关键字用于创建对象。由于数据类型是对象,所以New关键字用以创建一个数据类型对象。


Dim i As Integer = New Integer()
i = 10
System.Console.WriteLine(i.ToString()) 


代码块级别支持。像C++一样,VB.NET支持代码块级别的作用域检查。在语句块中声明的变量只在块内有效。


For i = 1 To 10
Dim p As Long
System.Console.WriteLine(i.ToString())
Next
System.Console.WriteLine(p.ToString()) 


这段代码在VB.NET中会得到一个编译错误,因为pFor..Next语句块之外不可访问。在VB6.0中这段代码可以通过。



改进了的类型安全
 

VB6.0中,当你声明一个对外部过程的引用时,可以指定任意类型的参数为As AnyAny关键字禁止了类型检查,允许任意数据类型传入和返回。


VB.NET不支持Any关键字。你必须指定每个参数和返回值的数据类型。


数组
VB.NET对数组作了明显的改动。


 

数组范围。在VB.NET中,你需要格外留意数组范围问题。VB6.0默认数组下界为0,故数组中的元素数量等与数组上界值加一。下面的数组界限从A(0)A(10),共有11个元素:


Dim A(10) As Single

可以使用Option Base改变下界值为1。在VB.NET中,数组和C++一样,下界值为0,不支持Option Base

注意:MSDN文档指出数组只能包括与其尺寸相等的元素数量,例如:

Dim A(10) As Integer 

只能包括10个元素(从A(0)A(9)),但在编译下面这段代码时我发现它运行良好,看起来数组中容纳了11个元素。



Dim A(10) As Integer 
A(0) = 12 


相关教程
关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号