C#中的null与void
一、null:
1、明义,null是什么意思?
null是指一个变量没有指向具体对象的有效引用。
这句话什么意思呢?意思就是
1)、能够使用null修饰的是变量;
2)、主要指的是引用。
那么这就引出一个问题,什么是引用?这么滴的话我们就顺便来探讨一下C#的数据类型,在C#中,主要数据类型可以分成两类,那就是值类型和引用类型。值类型就是如int、float等的预定义类型,而引用类型是什么呢?简单来说就是一个变量具有一个指向堆中一个值的引用,也就是地址。值类型是存放在栈当中的,具有名称和值,而引用类型不一样,引用类型在栈中存放的是名称和一个引用(或者说是地址)指向堆中的值。所以可以理解为引用就是一个指向具体对象值的地址。

因此,我们可以理解了,null意思就是一个类型的变量,该类型是引用类型,这个变量是存在的,但是这个变量暂时还没有指向哪一个值。
简单例子就是说在C#中,我们如果声明一个变量而没有给它赋值,那么在编译的时候是会出错的,因此我们需要给它赋值,这个时候就可以给这个变量赋值null。
2、null的使用范围:
按照上面的说法,null主要指的就是有没有引用,因此null主要使用在引用类型、指针类型(指针主要也是引用)、以及一个比较特殊的可空类型。
可空类型从何说起呢?做过项目的话应该知道,在数据表当中是允许一些字段为空的,但是C#又必须为声明的变量赋值,否则会报错,如果是引用类型的变量还好办,不过数据表当中的值类型的字段也是大量存在的,为了解决这个问题,子C#3.0开始就引入了可空类型这一个概念。先直接上图:

可以发现,第一个是报错的,而第二条代码是不报错的,为什么呢?因为第二条代码声明的变量类型是可空的int型,所以可以赋值为null。
3、明确常见的null使用中容易搞混的地方:
1)、赋值为null与不赋值的区别:
上面说过的,主要就是编译会不会通过的区别。
2)、为string类型的变量赋值为null与赋值为“”的区别:
为string类型的变量赋值为null表示不知道该值是否存在,而赋值为“”说明,该值是有值的,但是值是“,把“”当做一个值就好理解了。举个生活中的例子就是:
我们收集情报的话,收集到张三的手机号那一栏为null,那说明我们没有收集到张三手机号的相关信息,而如果那一栏的值是“”,那说明张三没有手机号。这就是区别。
二、void:
1、明义:
void表示没有任何类型,没有任何值。
2、用途
1)、更多的时候感觉void更像是一个指令或者像是一个配置。我们最常见的就是在声明方法的时候,这个值指示说明该方法不返回任何值。这个是一个用途。
2)、还有一个用途就很少见了,因为C#虽然事实上也有指针,但是我们几乎不用。说到这里大概就明白了,void还用在指针当中,原话是出自C#本质论第四版:
void出现在指针当中,说明指针指向未知类型的存储位置。(在这里要道歉撒,博主对于C#当中的指针一窍不通,因此无法进行解释)。
C#中的null与void的更多相关文章
- Java中有关Null的9件事
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常 (NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我 ...
- 转!!Java中关于Null的9个解释(Java Null详解)
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- 关于Java中的Null
什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...
- Java 中遇到null 和为空的情况,使用Optional来解决。
Java 中遇到null 和为空的情况,使用Optional来解决 示例代码: package crazy; import java.util.Optional; class Company { pr ...
- Java中的Null是什么?
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- Java中有关Null的9件事(转)
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- JDK8 Java 中遇到null 和为空的情况,使用Optional来解决。
空指针是我们最常见也最讨厌的异常,写过 Java 程序的同学,一般都遇到过 NullPointerException :) 初识null 详细可以参考[jdk 1.6 Java.lang.Null.P ...
- 关于 Java 中的 Null
什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...
- List 中去除 null 方法讨论
先看下面的程序段: public static void main(String[] args) { List<Integer> arrays = new ArrayList<Int ...
随机推荐
- BZOJ 2079: [Poi2010]Guilds
Description 问一个图是否有二染色方案,满足每个点都跟他颜色不用的点有连边. Sol 结论题. 除了只有一个点,否则任何图都能被二染色. Code /******************** ...
- 通过ip查询对方位置
我们这里使用的是baidumap的高精度IP定位API的接口,具体说明可以参考baidu提供的文档 使用前需要申请一个AK密钥类似于Kgcx......................xxl8w的样式 ...
- 在Oracle中恢复被DROP掉的表
在Oracle中可能不小心会DROP掉一个表,如果没有定期做备份的话,将会带来很大的麻烦.如果有的情况下,每天的数据都很重要,而定期备份的周期又稍长,情况恐怕也不容乐观!以前只知道Windows有个回 ...
- selenium web driver 使用JS修改input属性
selenium获取input时候,发现type=”hidden” 的input无法修改value,经牛人指点,可以使用js修改 首先html源文件如下,设置为text .hidden.submit ...
- Python之mmap内存映射模块(大文本处理)说明
背景: 通常在UNIX下面处理文本文件的方法是sed.awk等shell命令,对于处理大文件受CPU,IO等因素影响,对服务器也有一定的压力.关于sed的说明可以看了解sed的工作原理,本文将介绍通过 ...
- MVC 定时执行任务
环境:.net4.5 需求:需要一个方法定时执行任务 解决: System.Threading.Timer 提供以指定的时间间隔执行方法的机制. 此类不能被继承,有10多种实例化方法,满足多种情况. ...
- window.print() 打印页面部分内容的方法
用 JavaScript 实现页面数据的打印 : 主要是用到了一个 print() 函数 , 该函数将会打印整个 web 页面 body 内的所有 html 数据 ! 使用方法为 window.pri ...
- ora 01722无效数字
SQL语句里面,看看有没有字符串的,没加单引号. 后面经查,发现有字段对比时候,一个是字符串,一个是数值型,使用了ORACLE隐式转换,字符串里面有包含非数字型的,所以导致报错
- iOS 通信常用小功能
打电话 a.最简单最直接的方式:直接跳到拨号界面 NSURL *url = [NSURL URLWithString:@"tel://10010"]; [[UIApplicatio ...
- 经受时间沉淀的15 个 Android 通用流行框架大全
1. 缓存 名称描述 DiskLruCache: Java实现基于LRU的磁盘缓存 2.图片加载 名称描述 Android Universal Image Loader 一个强大的加载,缓存,展 ...