溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

VB.NET中怎么操作局部變量

發(fā)布時(shí)間:2021-07-15 11:33:44 來(lái)源:億速云 閱讀:143 作者:Leah 欄目:編程語(yǔ)言

本篇文章為大家展示了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。

  1. '例如以下代碼  

  2. Dim b As Boolean  

  3. Console.WriteLine(b)  

  4. Dim rnd1 As Random  

  5. If rnd1 Is Nothing Then  

  6. Console.WriteLine("yes")  

  7. End If  

  8. '最終會(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代碼:

  1. .method public static void Main
    () cil managed  

  2. {  

  3. .custom instance void [mscorlib]
    System.STAThreadAttribute::.ctor()  

  4. .entrypoint  

  5. .maxstack 2  

  6. .locals init (  

  7. [0] class [mscorlib]System.Random rnd,  

  8. [1] bool b,  

  9. [2] int32 i,  

  10. [3] bool VB$CG$t_bool$S0,  

  11. [4] int32 VB$CG$t_i4$S0,  

  12. [5] int32 num)  

  13. L_0000: nop   

  14. L_0001: ldc.i4 0x3e8  

  15. L_0006: newobj instance void 
    [mscorlib]System.Random::.ctor(int32)  

  16. L_000b: stloc.0   

  17. L_000c: ldc.i4.0   

  18. L_000d: stloc.2   

  19. L_000e: ldloc.1   

  20. L_000f: call void [mscorlib]System.
    Console::WriteLine(bool)  

  21. L_0014: nop   

  22. L_0015: ldc.i4.1   

  23. L_0016: stloc.1   

  24. L_0017: nop   

  25. L_0018: ldloc.2   

  26. L_0019: ldc.i4.1   

  27. L_001a: add.ovf   

  28. L_001b: stloc.2   

  29. L_001c: ldloc.2   

  30. L_001d: ldc.i4.4   

  31. L_001e: stloc.s num  

  32. L_0020: ldloc.s num  

  33. L_0022: ble.s L_000e  

  34. L_0024: ldc.i4.0   

  35. L_0025: stloc.s VB$CG$t_i4$S0  

  36. L_0027: ldloc.3   

  37. L_0028: call void [mscorlib]System.
    Console::WriteLine(bool)  

  38. L_002d: nop   

  39. L_002e: ldc.i4.1   

  40. L_002f: stloc.3   

  41. L_0030: nop   

  42. L_0031: ldloc.s VB$CG$t_i4$S0  

  43. L_0033: ldc.i4.1   

  44. L_0034: add.ovf   

  45. L_0035: stloc.s VB$CG$t_i4$S0  

  46. L_0037: ldloc.s VB$CG$t_i4$S0  

  47. L_0039: ldc.i4.4   

  48. L_003a: stloc.s num  

  49. L_003c: ldloc.s num  

  50. L_003e: ble.s L_0027  

  51. L_0040: nop   

  52. L_0041: ret   

上述內(nèi)容就是VB.NET中怎么操作局部變量,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI