Visual Basic快速入門

Basic語(yǔ)言的全名是Beginner's All-purpose Symbolic Instruction Code(初學(xué)者通用的符號(hào)指令代碼)贬媒,是幾十年前流行過(guò)的一門語(yǔ)言。我高中時(shí)候一門數(shù)學(xué)選修課中使用的也是Basic語(yǔ)言湖饱。我還記得當(dāng)時(shí)我為了使用Basic語(yǔ)言掖蛤,還從網(wǎng)上下了一個(gè)簡(jiǎn)陋的QBasic工具。當(dāng)時(shí)第一次接觸編程的我對(duì)編程語(yǔ)言充滿了興趣井厌。當(dāng)然在現(xiàn)在蚓庭,Basic語(yǔ)言已經(jīng)基本沒(méi)什么用了。現(xiàn)在還在使用的Basic語(yǔ)言大概就是微軟的Visual Basic了仅仆。今天就來(lái)介紹一下Visual Basic語(yǔ)言器赞。需要注意的是,VB語(yǔ)言運(yùn)行在微軟的CLR上墓拜,所以如果你對(duì)C#比較熟悉的話港柜,學(xué)習(xí)VB就很簡(jiǎn)單了。

HelloWorld

照例咳榜,第一個(gè)項(xiàng)目自然應(yīng)該是HelloWorld夏醉。打開(kāi)Visuall Studio,創(chuàng)建一個(gè)VB項(xiàng)目涌韩,然后就會(huì)出現(xiàn)如下圖所示的代碼畔柔。

HelloWorld

來(lái)解釋一下HelloWorld的代碼。首先第一行是導(dǎo)入類庫(kù)臣樱,和C#靶擦、java的import語(yǔ)句是一個(gè)道理腮考。然后下面定義了一個(gè)Program模塊,其中定義了Main函數(shù)玄捕,在函數(shù)中輸出Hello World踩蔚。在VB中,不使用大括號(hào)作為塊分隔符枚粘,而是使用End語(yǔ)句來(lái)結(jié)束塊作用域馅闽。

Imports System

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

基本數(shù)據(jù)類型

由于VB和C#都是運(yùn)行在CLR上的語(yǔ)言,所以其實(shí)它們的基本類型是一樣的赌结,都有有/無(wú)符號(hào)的各種長(zhǎng)度整數(shù)捞蛋、單精度雙精度浮點(diǎn)數(shù)、布爾類型柬姚、字符和字符串等類型。下面的代碼僅列出幾個(gè)常用的庄涡。

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系語(yǔ)言不同量承,使用的是Dim 變量名 As 變量類型的語(yǔ)法進(jìn)行定義。變量必須先定義才能使用穴店。如果想同時(shí)定義多個(gè)變量撕捍,可以這么寫(xiě)。

Dim i, j As Integer

如果想在定義變量的同時(shí)初始化泣洞,可以這樣忧风。

Dim bool As Boolean = True

如果要定義常量,可以變量類似球凰,只不過(guò)使用Const關(guān)鍵字狮腿。

Const cs As Integer = 1000

運(yùn)算符

先來(lái)看看算術(shù)運(yùn)算符。

運(yùn)算符 用途 例子
^ 冪運(yùn)算符 3 ^ 2 = 9
+ 加法
- 減法
* 乘法
/ 小數(shù)除法 3 / 2 = 1.5
\ 整除 3 \ 2 = 1
MOD 取模 6 MOD 4 = 2

然后是比較運(yùn)算符呕诉。這里需要注意的就是VB的相等和不等和其他語(yǔ)言的可能不太一樣缘厢。

運(yùn)算符 用途
= 相等
<> 不等
< 小于
> 大于
<= 不大于
>= 不小于

然后是邏輯運(yùn)算符凌节。

運(yùn)算符 用途
And 與運(yùn)算符眉厨,不短路求值
Or 或運(yùn)算符,不短路求值
Not 非運(yùn)算符
Xor 異或運(yùn)算符
AndAlso 與運(yùn)算符目派,短路求值
OrElse 或運(yùn)算符伊者,短路求值
IsTrue 是否為真
IsFalse 是否為假

條件語(yǔ)句

If語(yǔ)句

先來(lái)看看VB中的If語(yǔ)句英遭,其基本結(jié)構(gòu)是If 條件 Then 執(zhí)行體 Else 執(zhí)行體 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語(yǔ)句亦渗,可以添加ElseIf語(yǔ)句塊挖诸。

        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語(yǔ)句

Select語(yǔ)句相當(dāng)于其他語(yǔ)言中的switch語(yǔ)句,如果沒(méi)有匹配項(xiàng)央碟,會(huì)執(zhí)行Case Else語(yǔ)句塊税灌。

        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

循環(huán)語(yǔ)句

Do語(yǔ)句循環(huán)

Do語(yǔ)句循環(huán)有兩種結(jié)構(gòu)均函,第一種是循環(huán)條件在前。先來(lái)看看Do-While語(yǔ)句菱涤,當(dāng)滿足循環(huán)條件的時(shí)候會(huì)繼續(xù)循環(huán)苞也,不滿足條件時(shí)跳出循環(huán)。這里順便提一下粘秆,VB中沒(méi)有塊注釋如迟,只有單行注釋,以單引號(hào)開(kāi)頭攻走,直到句末殷勘。

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

再來(lái)看看Do-Until語(yǔ)句,和Do-While相反昔搂,在不滿足條件的時(shí)候會(huì)執(zhí)行循環(huán)玲销,滿足條件時(shí)跳出循環(huán)。

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

Do循環(huán)的第二種形式就是先執(zhí)行循環(huán)體摘符,然后進(jìn)行判斷贤斜,同樣有While和Until兩種。

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

While循環(huán)

還有就是傳統(tǒng)的While循環(huán)逛裤。

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

For循環(huán)

下面是For循環(huán)的例子瘩绒,在For循環(huán)中可以使用Step指定步長(zhǎng)。

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

Foreach循環(huán)

Foreach循環(huán)用于迭代一個(gè)列表中的每一項(xiàng)带族。

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

With語(yǔ)句

With語(yǔ)句其實(shí)不算循環(huán)語(yǔ)句锁荔,不過(guò)我看的這個(gè)VB教程把With語(yǔ)句放到這里說(shuō),那我也放到這里好了蝙砌。With語(yǔ)句在有些語(yǔ)言中也有阳堕,主要用途是節(jié)省代碼數(shù)量。比方說(shuō)有下面這個(gè)Person類拍霜。

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

假如有一個(gè)person對(duì)象多次出現(xiàn)的話嘱丢,就可以使用With語(yǔ)句,在With語(yǔ)句中祠饺,點(diǎn)訪問(wèn)符默認(rèn)指向的就是With語(yǔ)句指定的對(duì)象越驻。

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

跳轉(zhuǎn)語(yǔ)句

Exit語(yǔ)句

Exit語(yǔ)句用于結(jié)束某個(gè)代碼塊,它的形式如下道偷。想用Exit退出哪個(gè)代碼塊缀旁,就寫(xiě)哪個(gè)代碼塊的類型。

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

Continue語(yǔ)句

Continue語(yǔ)句用于結(jié)束當(dāng)前循環(huán)勺鸦,直接進(jìn)行下一次循環(huán)并巍。它的形式如下,后面跟要繼續(xù)的代碼塊類型换途。

Continue { Do | For | While }

Goto語(yǔ)句

最后就是Goto語(yǔ)句懊渡,它會(huì)直接跳轉(zhuǎn)到指定的標(biāo)簽處刽射。

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

數(shù)組

先來(lái)看看數(shù)組定義。VB中的數(shù)組比較特殊剃执,定義一個(gè)Dim a1(3)誓禁,其實(shí)是下標(biāo)0-4長(zhǎng)度為四的一維數(shù)組,這一點(diǎn)要非常注意肾档。

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

訪問(wèn)數(shù)組元素需要使用圓括號(hào),而不是一般語(yǔ)言的方括號(hào)怒见。

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

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

最后就是遍歷數(shù)組了俗慈,可以使用For循環(huán)迭代下標(biāo),或者用Foreach循環(huán)直接遍歷元素遣耍。

        '顯示數(shù)組
        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

函數(shù)

Sub函數(shù)

回頭來(lái)看看前面的HelloWorld闺阱,其中就有一個(gè)Main函數(shù),它是一個(gè)Sub函數(shù)舵变,也就是沒(méi)有返回值的函數(shù)馏颂。

Imports System

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

函數(shù)可以按值傳參,也可以按引用傳參棋傍,默認(rèn)情況下是按值傳參。

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

Function函數(shù)

Function函數(shù)就是有返回值的函數(shù)难审。在函數(shù)中瘫拣,如果要返回值,可以有兩種辦法告喊,第一種是使用Return語(yǔ)句麸拄,第二種是在函數(shù)體中向函數(shù)名賦值。

    '函數(shù)返回值可以用Return語(yǔ)句
    Function Return1() As Integer
        Return 1
    End Function

    '也可以向函數(shù)名賦值
    Function Return2() As Integer
        Return2 = 2
    End Function

可變參數(shù)列表

可變參數(shù)列表使用ParamArray聲明黔姜。

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

面向?qū)ο缶幊?/h2>

VB的類和C#的類非常相似拢切,同樣有字段、屬性等概念秆吵。構(gòu)造函數(shù)使用New聲明淮椰,不需要返回值。析構(gòu)函數(shù)使用Finalize聲明纳寂,也不需要返回值主穗。

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

    '構(gòu)造函數(shù)
    Public Sub New(name As String, tel As String)
        _name = name
        _tel = tel
    End Sub

    '析構(gòu)函數(shù)
    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

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

抽象類和接口

如果一個(gè)類的方法含有MustOverride修飾符,那么這個(gè)方法就是一個(gè)抽象方法毙芜。含有抽象方法的類就是抽象類忽媒,需要使用MustInherit關(guān)鍵字修飾。

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

Interface Color
    Function GetColor() As String
End Interface

繼承

繼承基類和實(shí)現(xiàn)接口的聲明必須寫(xiě)在類實(shí)現(xiàn)的前面腋粥。如果一個(gè)方法重寫(xiě)了基類的版本晦雨,那么這個(gè)方法應(yīng)該使用Overrides關(guān)鍵字修飾架曹。如果不希望類被其他類繼承,可以使用NotInheritable修飾闹瞧,類似于Java的final關(guān)鍵字或者C#的sealed關(guān)鍵字绑雄。如果子類需要調(diào)用基類的方法,可以使用MyBase關(guān)鍵字代表基類夹抗。

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

靜態(tài)成員

靜態(tài)成員和靜態(tài)函數(shù)使用Shared關(guān)鍵字聲明绳慎,對(duì)于每個(gè)類來(lái)說(shuō)Shared成員只會(huì)存在一個(gè)。

Class MyMath
    Public Shared PI As Double = 3.1415926

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

模塊

Module類似于Class漠烧,不同之處在于Module不需要實(shí)例化杏愤,其中的函數(shù)可以直接調(diào)用,就像靜態(tài)函數(shù)一樣已脓。

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("除數(shù)不能為零")
        Catch ex As ArithmeticException
            Console.WriteLine($"捕獲了數(shù)學(xué)計(jì)算異常:{ex.Message}")
        Catch ex As Exception
            Console.WriteLine($"捕獲了異常:{ex.Message}")
        Finally

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

以上就是VB語(yǔ)言的一些介紹了,希望對(duì)大家能有所幫助堕担。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末已慢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子霹购,更是在濱河造成了極大的恐慌佑惠,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件齐疙,死亡現(xiàn)場(chǎng)離奇詭異膜楷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)贞奋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門赌厅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人轿塔,你說(shuō)我怎么就攤上這事特愿。” “怎么了催训?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵洽议,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我漫拭,道長(zhǎng)亚兄,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任采驻,我火速辦了婚禮审胚,結(jié)果婚禮上匈勋,老公的妹妹穿的比我還像新娘。我一直安慰自己膳叨,他們只是感情好洽洁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著菲嘴,像睡著了一般饿自。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上龄坪,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天昭雌,我揣著相機(jī)與錄音,去河邊找鬼健田。 笑死烛卧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妓局。 我是一名探鬼主播总放,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼好爬!你這毒婦竟也來(lái)了局雄?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤存炮,失蹤者是張志新(化名)和其女友劉穎哎榴,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體僵蛛,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年迎变,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了充尉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衣形,死狀恐怖驼侠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谆吴,我是刑警寧澤倒源,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站句狼,受9級(jí)特大地震影響笋熬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜腻菇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一胳螟、第九天 我趴在偏房一處隱蔽的房頂上張望昔馋。 院中可真熱鬧,春花似錦糖耸、人聲如沸秘遏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)邦危。三九已至,卻和暖如春舍扰,著一層夾襖步出監(jiān)牢的瞬間倦蚪,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工妥粟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留审丘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓勾给,卻偏偏與公主長(zhǎng)得像滩报,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子播急,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 人生苦多脓钾,快來(lái) Kotlin ,快速學(xué)習(xí)Kotlin桩警! 什么是Kotlin可训? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,209評(píng)論 9 118
  • 1.1 VBA是什么 直到90年代早期,使應(yīng)用程序自動(dòng)化還是充滿挑戰(zhàn)性的領(lǐng)域.對(duì)每個(gè)需要自動(dòng)化的應(yīng)用程序,人們不得...
    浮浮塵塵閱讀 21,745評(píng)論 6 49
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,797評(píng)論 0 38
  • 大四未畢業(yè)的我,為了減輕家里的負(fù)擔(dān)捶枢,還是早早的出來(lái)工作了握截,年后買了一張站票來(lái)到深圳,對(duì)于我一個(gè)女孩說(shuō)背井離離鄉(xiāng)的...
    守藝人_木兆閱讀 183評(píng)論 0 0
  • 《安妮日記》是一本非常好的書(shū)烂叔,一個(gè)僅僅13歲女孩的視角是十分獨(dú)特且真實(shí)谨胞,在那樣一個(gè)布滿恐懼和絕望,條件極其...
    千飛鹿閱讀 824評(píng)論 0 8