一、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的更多相关文章

  1. Java中有关Null的9件事

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常 (NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我 ...

  2. 转!!Java中关于Null的9个解释(Java Null详解)

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  3. 关于Java中的Null

    什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...

  4. Java 中遇到null 和为空的情况,使用Optional来解决。

    Java 中遇到null 和为空的情况,使用Optional来解决 示例代码: package crazy; import java.util.Optional; class Company { pr ...

  5. Java中的Null是什么?

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  6. Java中有关Null的9件事(转)

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  7. JDK8 Java 中遇到null 和为空的情况,使用Optional来解决。

    空指针是我们最常见也最讨厌的异常,写过 Java 程序的同学,一般都遇到过 NullPointerException :) 初识null 详细可以参考[jdk 1.6 Java.lang.Null.P ...

  8. 关于 Java 中的 Null

    什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...

  9. List 中去除 null 方法讨论

    先看下面的程序段: public static void main(String[] args) { List<Integer> arrays = new ArrayList<Int ...

随机推荐

  1. IE浏览器版本判断 HTML代码

    <!--[if IE 6.0]> <div id="noie6" style="z-index: 20002;border: 1px solid #F7 ...

  2. ubuntu 12.04 install docker-engine1.12.3

    root@node3:/data/src# cat /etc/issueUbuntu 12.04.4 LTS \n \l   root@node3:/data/src# cat /etc/apt/so ...

  3. Sublime 3 如何设置xftp 排除文件夹“bower_components”,“node_modules”

    “bower_components”,“node_modules”这个文件夹,作为模块得引用文件,不需要下载本地进行编码,这里得文件非常多,若是不把这个两个文件夹排除掉掉话,通过xftp下载所有文件的 ...

  4. rsync参数及通信

    rsync 支持:  本机数据 <-------> 远程数据/本地数据 意义:  支持增量拷贝 --> 备份,节省带宽,时间   rsync -avL 一.常用选项  ******* ...

  5. 使用JHChart勾勒你想要的图表

    前言 从2016年4月14日开始,本人着手开发了JHChart图表工具库.经过断断续续的开发,截止到现在,已经实现了折线图.柱状图.饼状图.环形图和表格样式的图表功能.为了方便使用,我已经将一个简单的 ...

  6. Clang与libc++abi库安装

    系统ubuntu64位 Clang4.0 参考: 1 https://github.com/yangyangwithgnu/use_vim_as_ide#0.1 其中 第7章 工具链集成 2. htt ...

  7. GCC编译过程

    以下是C程序一般的编译过程: gcc的编译流程分为四个步骤,分别为:· 预处理(Pre-Processing) 对C语言进行预处理,生成*.i文件.· 编译(Compiling) 将上一步生成的*.i ...

  8. 使用AFNetWorking上传图片

    AFHTTPSessionManager *manager   = [AFHTTPSessionManager manager]; NSString *string                  ...

  9. 自己搭建了一个简单实用的Web版记事本

    演示播放地址:http://v.youku.com/v_show/id_XMTg0MjY2OTAxNg==.html 技术说明 环境 vs2012开发 sql2008r2数据库 技术 C#基础语言 M ...

  10. Redis五种数据类型命令介绍(4)

    1.string类型命令 设置值:set id 001 获取值:get id  删除键值:del id  验证键是否存在:exists id 显示所有的key:keys * incr .incrby指 ...