你的位置:首页 > ASP.net教程

[ASP.net教程].NET之值类型与引用类型


 

  C#是类型安全的开发语言,它的数据类型分为值类型(Value Type)和引用类型(Reference Type)两种。

  一、值类型(Value Type)

  • 字     符:char  U+0000 - U+ffff  16位 Unicode字符(其实字符也是一种整型)
  • 整     型:sbyte、byte、short、ushort、int、uint、long、ulong
  • 浮 点 型:float(7位有效为)、double(15到16位有效位)
  • decimal:128位数据类型,相比浮点型而言具有更高的精度(28到29位有效位)和更小的范围,适合财务和货币计算。
  • 布     尔:bool(真或假、True or False)
  • 结     构:struct
  • 枚     举:enum

  值类型总结:

  1. 字符、整型、浮点型、decimal和bool其实都是结构类型的实例,而且这几个类型的结构内部都通过const常量MaxValue和MinValue给出了这些类型的取值范围
  2. 现列出字符、整型、浮点型、decimal和bool这几个值类型对应的结构体(参见*标):
  3. 枚举类型是Enum abstruct类类型。
  4. 值类型都隐式派生子System.ValueType。
  5. enum和struct定义的时候应与类平级或位于类内部但不能位于方法内部。

  ****************************************************值类型对应的结构体************************************************

  char    Char

  sbyte      SByte

  byte        Byte

  short       Int16

  ushort     UInt16

  int       Int32

  uint     UInt32

  long    Int64

  ulong      UInt64

  float    Single

  double    Double

  decimal   Decimal

  bool    Boolean

  *****************************************************************************************************************

  二、引用类型(Reference Type,引用类型的变量又称为对象)

  • class:类
  • interface:接口
  • delegate:委托
  • object:.NET内置引用类型
  • string:.NET内置引用类型

  引用类型总结:

  类:是对具有相同特征的对象的抽象

  接口:不同类的对象之间无缝共享数据和通信的统一的约束规则

  委托:类似于C++中的指针,可将方法名作为参数传递,不同的是委托是类型安全的。

  object:.NET中所有类的基类

  string:字符串(零或多个Unicode字符组成的序列)

  三、值类型与引用类型的比较

  1. 值类型在内存的栈上分配存储空间,而引用类型是在内存的堆上分配存储空间
  2. 值类型赋值的时候是拷贝值得副本,而引用类型赋值只保存被应用对象的地址(.NET中叫“引用”)
  3. 值类型分配内存空间的速度要比应用类型分配内存空间的速度快,但重复的值类型赋值会造成内存空间开销过大,需要在内存开销问题是做出合理的权衡
  4. 值类型无法包含null,而引用类型可以是null
  5. ......