天天看點

Visual Basic快速入門

Basic語言的全名是Beginner's All-purpose Symbolic Instruction Code(初學者通用的符号指令代碼),是幾十年前流行過的一門語言。我高中時候一門數學選修課中使用的也是Basic語言。我還記得當時我為了使用Basic語言,還從網上下了一個簡陋的QBasic工具。當時第一次接觸程式設計的我對程式設計語言充滿了興趣。當然在現在,Basic語言已經基本沒什麼用了。現在還在使用的Basic語言大概就是微軟的Visual Basic了。今天就來介紹一下Visual Basic語言。需要注意的是,VB語言運作在微軟的CLR上,是以如果你對C#比較熟悉的話,學習VB就很簡單了。

HelloWorld

照例,第一個項目自然應該是HelloWorld。打開Visuall Studio,建立一個VB項目,然後就會出現如下圖所示的代碼。

Visual Basic快速入門

來解釋一下HelloWorld的代碼。首先第一行是導入類庫,和C#、java的import語句是一個道理。然後下面定義了一個Program子產品,其中定義了Main函數,在函數中輸出Hello World。在VB中,不使用大括号作為塊分隔符,而是使用End語句來結束塊作用域。

Imports System

Module Program
    Sub Main(args As String())
        Console.WriteLine("Hello World!")
    End Sub
End Module
           

基本資料類型

由于VB和C#都是運作在CLR上的語言,是以其實它們的基本類型是一樣的,都有有/無符号的各種長度整數、單精度雙精度浮點數、布爾類型、字元和字元串等類型。下面的代碼僅列出幾個常用的。

Public Class DataType
    Sub DataType()
        Dim b As Byte
        Dim i As Integer
        Dim s As Single
        Dim d As Double
        Dim c As Char
        Dim str As String
        Dim bool As Boolean

        b = 100
        i = 1000
        s = 1.5
        d = 3.1415926
        c = "c"c
        str = "abc"
        bool = True
    End Sub
End Class
           

變量和常量

VB的變量定義也和C系語言不同,使用的是

Dim 變量名 As 變量類型

的文法進行定義。變量必須先定義才能使用。如果想同時定義多個變量,可以這麼寫。

Dim i, j As Integer
           

如果想在定義變量的同時初始化,可以這樣。

Dim bool As Boolean = True
           

如果要定義常量,可以變量類似,隻不過使用

Const

關鍵字。

Const cs As Integer = 1000
           

運算符

先來看看算術運算符。

用途 例子
^ 幂運算符 3 ^ 2 = 9
+ 加法
- 減法
* 乘法
/ 小數除法 3 / 2 = 1.5

\

整除 3

\

2 = 1
MOD 取模 6 MOD 4 = 2

然後是比較運算符。這裡需要注意的就是VB的相等和不等和其他語言的可能不太一樣。

= 相等
<> 不等
< 小于
> 大于
<= 不大于
>= 不小于

然後是邏輯運算符。

And 與運算符,不短路求值
Or 或運算符,不短路求值
Not 非運算符
Xor 異或運算符
AndAlso 與運算符,短路求值
OrElse 或運算符,短路求值
IsTrue 是否為真
IsFalse 是否為假

條件語句

If語句

先來看看VB中的If語句,其基本結構是

If 條件 Then 執行體 Else 執行體 End If

Dim num As Integer = 5
        If num\2 = 0 Then
            Console.WriteLine($"{num} is even")
        Else
            Console.WriteLine($"{num} is odd")
        End If
           

如果需要多重If語句,可以添加ElseIf語句塊。

If num = 1 Then
            Console.WriteLine($"{num} is 1")
        ElseIf num = 2
            Console.WriteLine($"{num} is 2")
        Else
            Console.WriteLine($"{num} is other")
        End If
           

Select語句

Select語句相當于其他語言中的switch語句,如果沒有比對項,會執行Case Else語句塊。

Dim c As Char = "c"c
        Select c
            Case "a"c
                Console.WriteLine("a")
            Case "b"c, "c"c
                Console.WriteLine("b or c")
            Case Else
                Console.WriteLine("others")

        End Select
           

循環語句

Do語句循環

Do語句循環有兩種結構,第一種是循環條件在前。先來看看Do-While語句,當滿足循環條件的時候會繼續循環,不滿足條件時跳出循環。這裡順便提一下,VB中沒有塊注釋,隻有單行注釋,以單引号開頭,直到句末。

'Do While語句
        Dim i = 0
        Do While i < 5
            If i = 3 Then
                Exit Do
            End If
            Console.Write(i)
            i += 1
        Loop
           

再來看看Do-Until語句,和Do-While相反,在不滿足條件的時候會執行循環,滿足條件時跳出循環。

'Do Until語句
        i = 0
        Do Until i > 5
            If i < 3 Then
                i += 2
                Continue Do
            End If
            Console.Write(i)
            i += 1
        Loop
           

Do循環的第二種形式就是先執行循環體,然後進行判斷,同樣有While和Until兩種。

i = 0
        Do
            Console.Write(i)
            i += 1
        Loop While i < 5
        Console.WriteLine
           

While循環

還有就是傳統的While循環。

'While循環
        i = 0
        While i < 5
            Console.Write(i)
            i += 1
        End While
           

For循環

下面是For循環的例子,在For循環中可以使用Step指定步長。

For counter As Integer = 1 To 9 Step 1
            Console.Write(counter)
        Next
           

Foreach循環

Foreach循環用于疊代一個清單中的每一項。

Dim array() as Integer = {1, 2, 3, 4, 5, 6, 7}
        For Each item As Integer In array
            Console.Write(item)
        Next
           

With語句

With語句其實不算循環語句,不過我看的這個VB教程把With語句放到這裡說,那我也放到這裡好了。With語句在有些語言中也有,主要用途是節省代碼數量。比方說有下面這個Person類。

Public Class Person
    Public Property Name As String
    Public Property Age As Integer
End Class
           

假如有一個person對象多次出現的話,就可以使用With語句,在With語句中,點通路符預設指向的就是With語句指定的對象。

Dim person As Person = New Person
        With person
            .Name = "yitian"
            .Age = 25
            Console.WriteLine($"Person(Name:{.Name}, Age:{.Age})")
        End With
           

跳轉語句

Exit語句

Exit語句用于結束某個代碼塊,它的形式如下。想用Exit退出哪個代碼塊,就寫哪個代碼塊的類型。

Exit { Do | For | Function | Property | Select | Sub | Try | While }
           

Continue語句

Continue語句用于結束目前循環,直接進行下一次循環。它的形式如下,後面跟要繼續的代碼塊類型。

Continue { Do | For | While }
           

Goto語句

最後就是Goto語句,它會直接跳轉到指定的标簽處。

'Goto語句
        GoTo Ending
        Console.WriteLine("Print something")
        Ending:
        Console.WriteLine("This is end.")
           

數組

先來看看數組定義。VB中的數組比較特殊,定義一個

Dim a1(3)

,其實是下标0-4長度為四的一維數組,這一點要非常注意。

'下标0-9的十個元素的數組
        Dim array1(9) As Integer
        '11X11的二維數組
        Dim array2(2, 2) As Integer
        '定義并初始化數組
        Dim array3() = {1, 2, 3, 4, 5}
        '鋸齒數組,也就是數組的數組
        Dim array4 As Integer()() = New Integer(1)() {}
        array4(0) = New Integer() {1, 2}
        array4(1) = New Integer() {3, 4}
           

通路數組元素需要使用圓括号,而不是一般語言的方括号。

'初始化一維數組
        For i As Integer = 0 To 9
            array1(i) = i
        Next

        '初始化二維數組
        For i = 0 To 2
            For j = 0 To 2
                array2(i, j) = (i + 1)*(j + 1)
            Next
        Next
           

最後就是周遊數組了,可以使用For循環疊代下标,或者用Foreach循環直接周遊元素。

'顯示數組
        For Each e In array1
            Console.Write(e)
        Next
        Console.WriteLine

        For i As Integer = 0 To 2
            For j = 0 To 2
                Console.Write(array2(i, j))
            Next
            Console.WriteLine
        Next

        For Each e In array3
            Console.Write(e)
        Next
        Console.WriteLine
        For i As Integer = 0 To 1
            For j = 0 To 1
                Console.Write(array4(i)(j))
            Next
            Console.WriteLine
        Next
           

函數

Sub函數

回頭來看看前面的HelloWorld,其中就有一個Main函數,它是一個Sub函數,也就是沒有傳回值的函數。

Imports System

Module Program
    Sub Main(args As String())
        Console.WriteLine("Hello World!")
    End Sub
End Module
           

函數可以按值傳參,也可以按引用傳參,預設情況下是按值傳參。

Function GetParam(ByVal a As Integer, ByRef b As Integer)
        a = 10
        b = 10
        Console.WriteLine("Param changed")
    End Function
           

Function函數

Function函數就是有傳回值的函數。在函數中,如果要傳回值,可以有兩種辦法,第一種是使用Return語句,第二種是在函數體中向函數名指派。

'函數傳回值可以用Return語句
    Function Return1() As Integer
        Return 1
    End Function

    '也可以向函數名指派
    Function Return2() As Integer
        Return2 = 2
    End Function
           

可變參數清單

可變參數清單使用

ParamArray

聲明。

Function PrintIntegers(ParamArray integers As Integer())
        For Each i In integers
            Console.Write(i)
        Next
        Console.WriteLine
    End Function
           

面向對象程式設計

VB的類和C#的類非常相似,同樣有字段、屬性等概念。構造函數使用New聲明,不需要傳回值。析構函數使用Finalize聲明,也不需要傳回值。

Class Contact
    ' 字段
    Private _name As String
    Private _tel As String

    '構造函數
    Public Sub New(name As String, tel As String)
        _name = name
        _tel = tel
    End Sub

    '析構函數
    Protected Overrides Sub Finalize()
    End Sub

    '屬性
    Public Property Tel As String
        Get
            Return _tel
        End Get
        Set
            _tel = value
        End Set
    End Property

    Public Property Name As String
        Get
            Return _name
        End Get
        Set(value As String)
            _name = value
        End Set
    End Property

    '重寫方法
    Public Overrides Function ToString() As String
        Return $"Contact(Name:{Name}, Tel:{Tel})"
    End Function
End Class
           

抽象類和接口

如果一個類的方法含有MustOverride修飾符,那麼這個方法就是一個抽象方法。含有抽象方法的類就是抽象類,需要使用MustInherit關鍵字修飾。

MustInherit Class Shape
    MustOverride Function GetArea() As Double
End Class

Interface Color
    Function GetColor() As String
End Interface
           

繼承

繼承基類和實作接口的聲明必須寫在類實作的前面。如果一個方法重寫了基類的版本,那麼這個方法應該使用Overrides關鍵字修飾。如果不希望類被其他類繼承,可以使用NotInheritable修飾,類似于Java的final關鍵字或者C#的sealed關鍵字。如果子類需要調用基類的方法,可以使用MyBase關鍵字代表基類。

Class Circle
    Inherits Shape
    Protected radius As Double

    Public Sub New(r As Double)
        radius = r
    End Sub

    Public Overrides Function GetArea() As Double
        Return Math.PI*radius*radius
    End Function
End Class

NotInheritable Class RedCircle
    Inherits Circle
    Implements Color

    Public Sub New(r As Double)
        MyBase.New(r)
    End Sub

    Public Function Color_GetColor() As String Implements Color.GetColor
        Return "Red"
    End Function
End Class
           

靜态成員

靜态成員和靜态函數使用Shared關鍵字聲明,對于每個類來說Shared成員隻會存在一個。

Class MyMath
    Public Shared PI As Double = 3.1415926

    Public Shared Function GetPI As Double
        Return PI
    End Function
End Class
           

子產品

Module類似于Class,不同之處在于Module不需要執行個體化,其中的函數可以直接調用,就像靜态函數一樣。

Module Program
    Sub Main(args As String())
        Console.WriteLine("Hello World!")
    End Sub
End Module
           

異常處理

VB的異常處理和C#的一樣,都有Try、Catch、Finally部分。

Public Module ExceptionHandling
    Sub HandleException()
        Try
            Throw New ArithmeticException("除數不能為零")
        Catch ex As ArithmeticException
            Console.WriteLine($"捕獲了數學計算異常:{ex.Message}")
        Catch ex As Exception
            Console.WriteLine($"捕獲了異常:{ex.Message}")
        Finally

            Console.WriteLine("終結代碼")
        End Try
    End Sub
End Module
           

以上就是VB語言的一些介紹了,希望對大家能有所幫助。