C#中引用类型和值类型的理解
2010-07-17 09:34
190 查看
[align=center]值类型:[/align]
基于值类型的变量直接包含值,将一个值变量赋给另一个变量时,将复制包含的值。例如
int a = 2;
int b = a;
a = 3;
Console.WriteLine(b);
输出结果为:2,该程序的具体实现为:在线程堆栈中先为a开辟32位的空间存储2,再在线程堆栈中开辟32位的空间,遇见“=”时为b传值,值为a的值即2,当改变a的值时,存储a的内存空间变化,值变为3,但b的内存空间并没有随着变化,所以b仍为2
[align=center]引用类型:[/align]
[align=left]引用类型的变量又称为对象,,它引用的是变量的地址例如:[/align]
[align=left] int[] array = new[] { 1,2};
int[] array1 = array;
array[0] = 3;
for (int i = 0; i < array1.Length ; i++)
{
Console.WriteLine(array1[i]);
}[/align]
[align=left]数组为引用类型,具体实现为:当程序遇见 int[] array 时把int[] array 放在线程堆栈中并在托管堆中开辟一段空间存储{ 1,2},当遇见int[] array1也 把int[] array1 放在线程堆栈中,并使托管堆中存储{ 1,2}的空间指向int[] array1 因此当 array[0] = 3时,存储{ 1,2}的空间变为{ 3,2}所以指向int[] array1 的空间也为{ 3,2}。[/align]
[align=left]总之一句话:值类型赋的是值,引用类型赋的是地址[/align]
基于值类型的变量直接包含值,将一个值变量赋给另一个变量时,将复制包含的值。例如
int a = 2;
int b = a;
a = 3;
Console.WriteLine(b);
输出结果为:2,该程序的具体实现为:在线程堆栈中先为a开辟32位的空间存储2,再在线程堆栈中开辟32位的空间,遇见“=”时为b传值,值为a的值即2,当改变a的值时,存储a的内存空间变化,值变为3,但b的内存空间并没有随着变化,所以b仍为2
[align=center]引用类型:[/align]
[align=left]引用类型的变量又称为对象,,它引用的是变量的地址例如:[/align]
[align=left] int[] array = new[] { 1,2};
int[] array1 = array;
array[0] = 3;
for (int i = 0; i < array1.Length ; i++)
{
Console.WriteLine(array1[i]);
}[/align]
[align=left]数组为引用类型,具体实现为:当程序遇见 int[] array 时把int[] array 放在线程堆栈中并在托管堆中开辟一段空间存储{ 1,2},当遇见int[] array1也 把int[] array1 放在线程堆栈中,并使托管堆中存储{ 1,2}的空间指向int[] array1 因此当 array[0] = 3时,存储{ 1,2}的空间变为{ 3,2}所以指向int[] array1 的空间也为{ 3,2}。[/align]
[align=left]总之一句话:值类型赋的是值,引用类型赋的是地址[/align]
相关文章推荐
- c#中的引用类型和值类型
- [转]理解C#值类型与引用类型
- C#中引用类型和值类型分别有哪些
- 理解C#值类型与引用类型 <转载>
- CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段
- [转载]实际举例C#引用类型和值类型的区别
- C# 引用类型和值类型的区别
- C#引用类型和值类型的介绍与实例
- C#值类型和引用类型的深入理解
- C#值类型和引用类型的深入理解
- 对C# 中堆栈,堆,值类型,引用类型的理解
- 理解C#值类型与引用类型(摘录)
- [转]理解C#值类型与引用类型
- 理解C#中值类型和引用类型的区别
- C#引用类型和值类型
- C#里的装箱、装箱和值类型、引用类型
- 读《.NET(C#):理解值类型/引用类型,装箱/拆箱,Object类》 有感,小白类文
- C#之理解值类型和引用类型
- C#引用类型和值类型的区别——值类型和引用类型在内存中的部署
- C#中引用类型和值类型分别有哪些