C#中的null与void

时间:2022-05-27 16:25:23

一、null:

1、明义,null是什么意思?

  null是指一个变量没有指向具体对象的有效引用。

  这句话什么意思呢?意思就是

  1)、能够使用null修饰的是变量;

  2)、主要指的是引用。

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

C#中的null与void

因此,我们可以理解了,null意思就是一个类型的变量,该类型是引用类型,这个变量是存在的,但是这个变量暂时还没有指向哪一个值。

简单例子就是说在C#中,我们如果声明一个变量而没有给它赋值,那么在编译的时候是会出错的,因此我们需要给它赋值,这个时候就可以给这个变量赋值null。

2、null的使用范围:

按照上面的说法,null主要指的就是有没有引用,因此null主要使用在引用类型、指针类型(指针主要也是引用)、以及一个比较特殊的可空类型。

可空类型从何说起呢?做过项目的话应该知道,在数据表当中是允许一些字段为空的,但是C#又必须为声明的变量赋值,否则会报错,如果是引用类型的变量还好办,不过数据表当中的值类型的字段也是大量存在的,为了解决这个问题,子C#3.0开始就引入了可空类型这一个概念。先直接上图:

C#中的null与void

可以发现,第一个是报错的,而第二条代码是不报错的,为什么呢?因为第二条代码声明的变量类型是可空的int型,所以可以赋值为null。

3、明确常见的null使用中容易搞混的地方:

  1)、赋值为null与不赋值的区别:

    上面说过的,主要就是编译会不会通过的区别。

  2)、为string类型的变量赋值为null与赋值为“”的区别:

    为string类型的变量赋值为null表示不知道该值是否存在,而赋值为“”说明,该值是有值的,但是值是“,把“”当做一个值就好理解了。举个生活中的例子就是:

    我们收集情报的话,收集到张三的手机号那一栏为null,那说明我们没有收集到张三手机号的相关信息,而如果那一栏的值是“”,那说明张三没有手机号。这就是区别。

二、void:

1、明义:

  void表示没有任何类型,没有任何值。

2、用途

  1)、更多的时候感觉void更像是一个指令或者像是一个配置。我们最常见的就是在声明方法的时候,这个值指示说明该方法不返回任何值。这个是一个用途。

  2)、还有一个用途就很少见了,因为C#虽然事实上也有指针,但是我们几乎不用。说到这里大概就明白了,void还用在指针当中,原话是出自C#本质论第四版:

    void出现在指针当中,说明指针指向未知类型的存储位置。(在这里要道歉撒,博主对于C#当中的指针一窍不通,因此无法进行解释)。