值类型:
 
基于值类型的变量直接包含值,将一个值变量赋给另一个变量时,将复制包含的值。例如
          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
引用类型:
引用类型的变量又称为对象,,它引用的是变量的地址例如:
 int[] array = new[] { 1,2};
            int[] array1 = array;
            array[0] = 3;
            for (int i = 0; i < array1.Length ; i++)
            {
                Console.WriteLine(array1[i]);
            }
数组为引用类型,具体实现为:当程序遇见 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}。
总之一句话:值类型赋的是值,引用类型赋的是地址