博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nothing 和 Is
阅读量:6349 次
发布时间:2019-06-22

本文共 1285 字,大约阅读时间需要 4 分钟。

       我们通常认为Nothing(VB.NET)中和null(C#)中的功能是完全一样的。其实如果你这样认为的话,就大错特错了。

       的确,一般情况下,如果把null(vb中把Nothing赋值给一个引用类型,那么此二者结果是等同的)。但是VB.NET中还允许你把Nothing赋值给值类型(无论是基本值类型,还是自定义的Struct值类型),这在C#中是不允许的(造成编译错误)。比如:

Dim i As Integer = Nothing

      上面这段代码的意思是:给i设置自身类型的初始值(相当于i=0),在C#中等同于:

int i = default(int);

      另外,VB.NET的Is是用来判断“两个引用对象之间是否相同,“=”只被用于检测两个对象的内容值是否相同(即等价于调用运算符重载=,并且等价于直接调用Equals方法进行数值比较)。

Dim s1 As String = "a"    Dim s2 As String = "a"    Console.WriteLine(s1 Is s2)

      以上就严格证明了String的确是存在“字符串池”的,因为两者引用对象都是s1所指向的那个存储空间。相比较之下,C#要证明就不是很容易了。因为C#的双等于虽然可以直接作用于任意两个类进行比较,而且比较的是两个类的句柄地址,但是它可以被重写(通过运算符重载“双等于”特性,也等价于调用Equal函数),这样往往无法分辨清楚究竟是比较两者之间存储的实质内容是否一致,还是对象引用地址是否一致。

      在两个引用类型中,若要比较某对象是否可以安全转化为另外一个对象,VB.NET直接可以使用“TypeOf(实体名) Is 类名”即可。相对应地,C#中直接用“实体名 is 类名”或者“if(实体名 as 类名==null)”来加以判断

        '添加参数

        If Param IsNot Nothing Then
            SqlCmd.Parameters.AddRange(Param)
        End If

        这里IsNot用来判断数组Param与Nothing是否相同,来确定,Param数组是否为空,在这里为什么要用IsNot Nothing来做判断呢?怎么不是VbNull等呢?

       其实,Nothing在变量或数组等声明的时候,就应该赋给变量的,比如Dim intA as integer =nothing ,但我们经常不写,我们需要给声明的变量赋其它值或对象,很多编译器IDE对变量都要检查其是否初始化,写上Nothing是一种好的编程习惯,当我们判断一个对象资源是否释放或是否为空时,感觉会很有用例如:

       If Not IsNothing(Me.GetSqlCnn()) Then

              Me.GetSqlCnn().Close()
       End If

       VB.NET 中Nothing是数据类型的默认值,包括值类型、对象类型、自定义类型等,相当于C#中的Null

转载于:https://www.cnblogs.com/lilongsheng/archive/2012/02/19/3226122.html

你可能感兴趣的文章
Throwable是一个怎样的类?
查看>>
三条代码 搞定 python 生成验证码
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
无线和有线路由哪种性能更好
查看>>
Dwr3.0纯注解(纯Java Code配置)配置与应用浅析三之后端反向调用前端
查看>>
Ubuntu下安装遨游浏览器
查看>>
自定义Linux service脚本
查看>>
微信开发之发红包
查看>>
一键lnmp脚本&&php扩展模块安装(适用于CENTOS6.X系列)
查看>>
二维观察---文字的裁剪
查看>>
矩形覆盖
查看>>
ICMP
查看>>
界面设计模式(第2版)(全彩)
查看>>
解决VMware Workstation错误:未能锁定文件
查看>>
CentOS6 手动编译升级 gcc
查看>>
memcached的安装与开启脚本
查看>>
zabbix 邮件报警 -- sendmail
查看>>
JavaScript异步编程
查看>>
tcpdump用法小记
查看>>