您好,登錄后才能下訂單哦!
本篇文章為大家展示了VB.NET中怎么操作局部變量,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
VB.NET開(kāi)發(fā)工具的出現(xiàn)對(duì)開(kāi)發(fā)領(lǐng)域提供了一個(gè)全新的編寫(xiě)方式。作為程序員來(lái)說(shuō),他們又多了一種編程語(yǔ)言的選擇,這是一件好事。我們知道,在類或者結(jié)構(gòu)初始化的時(shí)候, 成員變量***不要顯式賦以0、Nothing、False等初值,這樣不但沒(méi)有必要而且會(huì)降低性能。因?yàn)槌蓡T變量首先會(huì)被分配內(nèi)存空間,并且該內(nèi)存空間自動(dòng)用“0”進(jìn)行初始化,因此顯式的賦值會(huì)增加指令操作而影響性能。
但如果是VB.NET局部變量呢?
一般情況下,如果不顯式初始化局部變量,局部變量會(huì)被自動(dòng)也賦以空值、0、或者false。
'例如以下代碼
Dim b As Boolean
Console.WriteLine(b)
Dim rnd1 As Random
If rnd1 Is Nothing Then
Console.WriteLine("yes")
End If
'最終會(huì)輸出:"false yes"
不過(guò)對(duì)于引用類型的Random,編譯器會(huì)給出“ 變量“rnd1”在賦值前被使用??赡軙?huì)在運(yùn)行時(shí)導(dǎo)致 null 引用異常?!?的警告。值類型則沒(méi)有任何警告。
ok,再來(lái)看下這段VB.NET局部變量的代碼:
Module Module1Module Module1 Sub Main()Sub Main() Dim rnd As New Random(1000) For i As Integer = 0 To 4 Dim b As Boolean Console.WriteLine(b) If rnd.NextDouble > 0.5 Then b = True End If Next End Sub End Module
Module Module1
Sub Main() Dim rnd As New Random(1) For i As Integer = 0 To 9 Dim b As Boolean Console.WriteLine(b) If rnd.NextDouble < 0.5 Then b = True End If Next For i As Integer = 0 To 9 Dim rnd1 As Random If rnd1 Is Nothing Then Console.WriteLine("yes") Else Console.WriteLine("no") End If rnd1 = New Random Next End Sub End Module
照說(shuō)每次循環(huán)都重新定義并初始化該VB.NET局部變量,期望的輸出值應(yīng)該一直都是false。
但猜猜實(shí)際最終輸出結(jié)果是什么,false,false,false,true,true??!
就是這個(gè)怪誕的行為讓我困擾了很久。
ok,我們看看對(duì)應(yīng)的il代碼:
.method public static void Main
() cil managed{
.custom instance void [mscorlib]
System.STAThreadAttribute::.ctor().entrypoint
.maxstack 2
.locals init (
[0] class [mscorlib]System.Random rnd,
[1] bool b,
[2] int32 i,
[3] bool VB$CG$t_bool$S0,
[4] int32 VB$CG$t_i4$S0,
[5] int32 num)
L_0000: nop
L_0001: ldc.i4 0x3e8
L_0006: newobj instance void
[mscorlib]System.Random::.ctor(int32)L_000b: stloc.0
L_000c: ldc.i4.0
L_000d: stloc.2
L_000e: ldloc.1
L_000f: call void [mscorlib]System.
Console::WriteLine(bool)L_0014: nop
L_0015: ldc.i4.1
L_0016: stloc.1
L_0017: nop
L_0018: ldloc.2
L_0019: ldc.i4.1
L_001a: add.ovf
L_001b: stloc.2
L_001c: ldloc.2
L_001d: ldc.i4.4
L_001e: stloc.s num
L_0020: ldloc.s num
L_0022: ble.s L_000e
L_0024: ldc.i4.0
L_0025: stloc.s VB$CG$t_i4$S0
L_0027: ldloc.3
L_0028: call void [mscorlib]System.
Console::WriteLine(bool)L_002d: nop
L_002e: ldc.i4.1
L_002f: stloc.3
L_0030: nop
L_0031: ldloc.s VB$CG$t_i4$S0
L_0033: ldc.i4.1
L_0034: add.ovf
L_0035: stloc.s VB$CG$t_i4$S0
L_0037: ldloc.s VB$CG$t_i4$S0
L_0039: ldc.i4.4
L_003a: stloc.s num
L_003c: ldloc.s num
L_003e: ble.s L_0027
L_0040: nop
L_0041: ret
}
上述內(nèi)容就是VB.NET中怎么操作局部變量,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。