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

通过overload关键字支持方法重载。使用这个关键字,你可以定义同名但不同参数的方法。


类成员访问域

除了原有的PrivatePublicVB.NET引入了几个新关键字。全部访问域关键字列表如下:

关键字

作用域

Private

限于class内部

Public

可以从class外访问

Friend

限于class所属的应用程序内

Protected

只能被class和其派生类访问

Protected Friend

能被class、应用程序和派生类访问


继承

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

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则支持这个特性。


相关教程