C#中关于值类型和引用类型的个人理解

Posted xuzy-x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中关于值类型和引用类型的个人理解相关的知识,希望对你有一定的参考价值。

值类型,除了最终继承自Object,还继承自ValueType

值类型继承ValueType,ValueType继承Object。(c#中所有的类型都最终继承自Object)

 

创建引用类型时,runtime会为其分配两个空间,一块空间分配在堆上,存储引用类型本身的数据,另一个块空间分配在栈上,存储对堆上数据的引用(实际上存储的堆上的内存地址,也就是指针)。

创建值类型时, runtime会为其分配一个空间,这个空间分配在变量创建的地方,如:

      如果值类型是在方法内部创建,则跟随方法入栈,分配到上存储。

      如果值类型是引用类型的成员变量,则跟随引用类型,存储在上。

 

值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的

 

值类型存取速度快,引用类型存取速度慢。

 

值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用

 

栈的内存分配是自动释放;而堆在.NET中会有GC来释放       

 

值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中

 

如:int是值类型,string是引用类型,引用类型指向的是堆中的位置

以上是关于C#中关于值类型和引用类型的个人理解的主要内容,如果未能解决你的问题,请参考以下文章

c# 值传递 引用传递

C语言数组是“引用类型”么?

C#装箱和拆箱

C# 值类型和引用类型的区别

C#几种类型转换方法的个人总结

C#基础:理解装箱与拆箱