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)如下圖所示的代碼畔柔。
來(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ì)大家能有所幫助堕担。