网站首页 > 文章中心 > 其它

vb.net中nop_vb.net vb区别

作者:小编 更新时间:2023-09-18 07:48:37 浏览量:79人看过

在VB.NET中模块中定义的过程的默认访问级别是Friend. 对不对

VB.Net中模块定义的过程的默认访问级别是Public

你可以使用ILDasm反汇编一个VB.Net程序来查看

我进行试验的源代码为(Console Application):

Module Module1

Sub Main()

k()

End Sub

Sub k()

Console.WriteLine("ABC")

Console.ReadLine()

End Module

使用ILDasm进行反编译后

k()过程被解释为:

.method public static void k() cil managed

{

IL_0000: nop

IL_000b: nop

IL_000c: call string [mscorlib]System.Console::ReadLine()

IL_0011: pop

} // end of method Module1::k

由此得知,在VB.NET的模块中定义的过程的默认访问级别是Public,而不是Friend

简单介绍一下vb.net中 IsNothing,IsDbNUll和IsNullOrEmpty 分别有什么用,和区别

isnothing : 检测变量值是否为nothing.nothing表示任意数据类型的默认值,如果变量是引用类型,则值 Nothing 意味着该变量不与任何对象相关联.

isdbnull:说明对象的数据丢失或不存在,用于指示缺少的值.它不等效于 nullNothing 或empty

null :一般用于数据库中.数据库中的字段可能需要区分已赋予一个有意义的值与尚未赋值这两种情况, 尚未赋值将用 null 值表示.

另外可以为 null 的类型的最重要成员是它有 HasValue 和 Value 属性. HasValue 为 FALSE时

value为 null

empty: 表示尚未实例化的变量的值,string.empty是空字符串"",

IsNullOrEmpty:判断是否为null或者empty.

vb.net 中 nothing和""空的字符串 有什么区别吗?我查了一下没看懂他们说的什么意思...

在VB.NET里,给变量赋值NoThing,其结果将对该变量赋予初始值;

而对于字符串变量初始值就是"",数值变量初始值为0,布尔变量初始值为False.

所以对于字符串变量,赋予NoThing与赋予""是相同的.

vb.net 数组的定义方法

多变量循环计算问题

如果你在循环中定义的是值类型变量(如Integer、String等系统预定义的基本类型,以及用Structure定义的任何类型,如Point),那么是不会在循环的过程中不断地进行创建和销毁,这个要在ILDASM中看才会看到.你之所以在VB.NET中看到变量在循环外面就不见了,那是IDE在作怪,它根据调试信息屏蔽掉了.事实上这个变量在进入函数的时候就给你创建好了,并且在推出函数的时候才会被注销掉.

当然,以上的情况不包括用Class定义的所有类.例如Form、Control等.

建立这样一个ConsoleApplication,在Sub Main里面添加代码如下:

Public Sub Main()

Dim i As Integer

For i = 1 To 10

Dim s As String

s = i.ToString()

Next

编译成Exe,然后执行VS.NET\Framework SDK\bin\目录下的ILDASM.EXE,用它打开编译好的EXE文件,找到Module1,双击Main:void(),就可以看到中间代码了——一种所谓IL的伪汇编.

再来给大家解释一下吧:

// method表示是"方法",实际上就是函数.

// public和VB中的没区别,static表示是Shared的,void表示无返回值,cil表示是符合CIL的,managed 托管的.

method public static void Main() cil managed

.entrypoint //表示这里是整个程序的入口点.

//下面这个是一个标记,用于表示这个函数是单线程的.

.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )

[1] string s) // 第1号字符串变量s

IL_0000: nop // 空指令

// 上面两句的意思是 (For) i = 1

IL_000a: stloc.1 // 将栈顶元素推到第1号本地变量,也就是s中.

//上面三句的意思是 s = i.ToString()

IL_000b: nop

IL_000c: ldloc.0 // 将i推到栈顶.

IL_000e: add.ovf // 将堆栈最顶上的两个元素相加,并进行溢出检查.

IL_000f: stloc.0 // 将相加的结果(在栈顶)推到i中.

//上面三句的意思是 i = i 1

IL_0010: ldloc.0 // 将i推到栈顶

// 上面三句话的意思是 For (i=1) To 10 ... Next

} // end of method Module1::Main

于是,在整个循环过程中,只有最开始时有一个对s的初始化,其他地方就没有见到了,甚至没有看到显式的"注销".这下子不用担心写在里面会降低效率了.

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章