优秀的编程知识分享平台

网站首页 > 技术文章 正文

C#中的值类型和引用类型(c# 引用类型)

nanyue 2024-11-12 11:47:52 技术文章 1 ℃


C#中的数据类型分为两种:值类型和引用类型

1、值类型包含:byte、sbyte、char、short、ushort、int、uint、long、ulong、decimal、float、double、bool、enum、struct

2、基于值类型的变量直接包含值。将一个值类型的变量赋值给另一个值类型,将赋值包含的值。这与引用类型变量的赋值不同,引用类型

  变量的复制只复制对变量的引用,而不复制对象本身。所有的值类型均隐性派生自System.ValueType。

3、值类型存储在堆栈(stack)中,如:int a = 10 在堆栈中存储了a的值10。

引用类型的变量在声明后保存在堆栈(stack)中,在堆栈中固定占用4个字节,用于存放对象的地址。在使用new关键字创建对象后,由

  .Net在内存堆(heap)中为其分配相应的内存空间,并将该对象的首地址存储在应用类型的变量中。例如:ClassOne one = new ClassOne()

  .Net在内存堆(heap)中为one分配了相应的物理内存,假如其首地址为1000,则在堆栈(stack)中变量one存储的one的首地址1000

4、与引用类型不同,值类型不可派生出新的类型。但与引用类型相同的是结构也可以实现接口。值类型不可包含Null值,然而可空类型功能允许将null赋给值类型

5、例:

  int a = 10

  int b = a

  ClassOne one = new ClassOne()

  ClassTwo two = one

  则在堆栈中为变量b分配4个字节的空间,并且将变量a的值10复制给变量b,此时变量a和变量b中各保留10的一个备份,对a的修改不会影响b,同样修改b的值也不会影响a。

  然后在堆栈中为two分配4个字节的空间,并且将变量one的值复制给two,由于one中存储的是one对象的首地址1000,因此复制后two中保存的也是one对象的首      

  地址1000,因此,此时one和two变量都保存了同一个对象的首地址,即他们两个指向同一个对象。

Tags:

最近发表
标签列表