本篇文章为大家展示了VB.NET中怎么操作局部变量,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
VB.NET开发工具的出现对开发领域提供了一个全新的编写方式。作为程序员来说,他们又多了一种编程语言的选择,这是一件好事。我们知道,在类或者结构初始化的时候, 成员变量***不要显式赋以0、Nothing、False等初值,这样不但没有必要而且会降低性能。因为成员变量首先会被分配内存空间,并且该内存空间自动用“0”进行初始化,因此显式的赋值会增加指令操作而影响性能。
但如果是VB.NET局部变量呢?
一般情况下,如果不显式初始化局部变量,局部变量会被自动也赋以空值、0、或者false。
'例如以下代码
Dim b As Boolean
Console.WriteLine(b)
Dim rnd1 As Random
If rnd1 Is Nothing Then
Console.WriteLine("yes")
End If
'最终会输出:"false yes"
不过对于引用类型的Random,编译器会给出“ 变量“rnd1”在赋值前被使用。可能会在运行时导致 null 引用异常。” 的警告。值类型则没有任何警告。
ok,再来看下这段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
照说每次循环都重新定义并初始化该VB.NET局部变量,期望的输出值应该一直都是false。
但猜猜实际最终输出结果是什么,false,false,false,true,true!!
就是这个怪诞的行为让我困扰了很久。
ok,我们看看对应的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
}
上述内容就是VB.NET中怎么操作局部变量,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。