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項目,然后就會出現如下圖所示的代碼。

HelloWorld

來解釋一下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語言的一些介紹了,希望對大家能有所幫助。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態類型編程...
    任半生囂狂閱讀 26,276評論 9 118
  • 1.1 VBA是什么 直到90年代早期,使應用程序自動化還是充滿挑戰性的領域.對每個需要自動化的應用程序,人們不得...
    浮浮塵塵閱讀 21,856評論 6 49
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,905評論 0 38
  • 大四未畢業的我,為了減輕家里的負擔,還是早早的出來工作了,年后買了一張站票來到深圳,對于我一個女孩說背井離離鄉的...
    守藝人_木兆閱讀 200評論 0 0
  • 《安妮日記》是一本非常好的書,一個僅僅13歲女孩的視角是十分獨特且真實,在那樣一個布滿恐懼和絕望,條件極其...
    千飛鹿閱讀 849評論 0 8