c# 的变量类型

值类型

         值类型变量直接存储其数据值,注意包含整数类型,浮点类型以及布尔型。值类型变量在栈中进行分配,因此效率很高,使用值类型的主要目的是为了提升性能。值类型具有如下特性。

  • 值类型变量都存储在栈中。
  • 访问值类型变量是,一般都是直接访问其实例。
  • 每个值类型变量都有自己的数据副本,因此对一个值类型变量的操作不会影响其他变量。
  • 复制值类型变量时,复制的是变量的值,而不是变量的地址。
  • 值类型变量不能为null,必须具有一个确定的值。

值类型是从System.ValueType类继承而来的类型。值类型中包含的几种数据类型。

  • 整数类型  (int,long,byte,ushort,uint,ulong)u:有符号整形
  • 浮点类型    (float(单精度),double(双精度)) 如果需要使用到float类型变量时,必须在数值的后面跟随f或F,否则编译器会直接将其作为double类型处理,也可以在double类型的值前加上(float),对其进行强制转换.
  • 布尔型        表示true 或 false .在定义全局变量时,如果没有特定的要求不用对其初始化,整数和浮点数类型的变量默认初始化为0,布尔类型的初始化为false.

引用类型

     引用类型是构建C#程序应用的主要对象类型数据,在应用程序执行的过程中,预先定义的对象类型以new创建对象实例,并且存储在堆中。堆是一种由系统弹性配置的内存空间,没有特定大小及存活时间,因此可以被弹性的运用于对象的访问。引用类型就类似于生活中的代理商,代理商没有自己的产品,而是代理厂家的产品,使其就好像是自己的产品一样。引用类型具有如下特征。

  • 必须在托管堆中为引用类型变量分配内存
  • 使用new关键字来创建引用类型变量
  • 在托管堆中分配的每个对象都有与之相关联的附加成员,这些成员必须被初始化。
  • 引用类型变量是由垃圾回收机制来管理的
  • 引用类型被赋值前的值都是NULL

多个引用类型变量可以引用同一对象,主要包括类,接口,数组和委托。

值类型与引用类型的区别

从概念上来看,值类型就是存储其值,而引用类型存储对其值的引用。这两种类型存储在内存的不同地方。在C#中,必须设计类型时就决定类型实例的行为,如果在编写代码时不能理解引用类型和值类型的区别。会给代码带来不必要的异常

从内存空间来上来看,值类型是在栈中操作,而引用类型则是在堆中分配存储单元。栈在编译时就分好内存空间,在代码中有钱的明确定义,而堆是程序运行中动态分配的内存空间,可以根据程序的运行情况动态的分配内存的大小。因此,值类型总是在内存中占用一个预定义的字节数。而引用类型的变量则在堆中分配一个内存空间,这个内存空间包含的是对另一个内存位置的引用,这个位置是托管堆中的一个地址,即存放变量实际的地方。

也就是说值类型相当于现金,可以直接使用。而引用类型是存折,需要先取银行取钱才能用。

枚举类型

     枚举类型是一种特殊的值类型,它用于声明一组具有相同性质的常量,编写与日期有关的应用程序时,经常需要使用年,月,日,星期等数据时,可以将这些数据组织成多个不同名称的枚举类型。使用枚举类型可以增加程序的可读性和可维护性。同时,枚举类型可以避免类型错误。(在定义枚举类型时,如果不对其赋值,默认情况下,第一个枚举数的值为0,后面每个枚举数的值依次增加1.)枚举数的类型为整数类型.

猜你喜欢

转载自blog.csdn.net/qq_39059405/article/details/85335382