C#中的数据类型分为值类型和引用类型,其中基于值类型的变量会直接包含值,而引用类型的变量则是存储对实际数据的引用。
        它们之间的区别还表现在值类型的变量是直接存放在内存中,而引用类型的变量则存储的是存放在内存堆中对象的地址。而且数据存放的内存类型也不同,分别为线程堆栈和托管堆当中。
        值类型包括有简单类型、枚举类型、结构类型。引用类型包括类类型、接口、string类型、数组、委托类型。
        值类型的实例原理:
        代码: 
1                static void Main(string[] args)
2                {
3                        int a = 5;
4                        int b = a;
5                        b = 10;
6                        Console.writeLine(a);
7                }
                    
     当程序运行到第三行时,先将a=5(int)压入到线程堆栈中,当执行到第四句时因为是值传递,a只会将自己的数值5传递给b,因此此时就会将b=5压入到线程堆栈中这是执行到第5句时,程序只会改变b所属的那份内存所存的数值。而a保持不变。到达第六句时,系统就将a的值从栈中pop出。 为5。
C#中的引用类型实例原理
代码:
1      static void Main(string[] args)
2       {
3            int[] Array_a =new int[]{5}; 
4            int[] Array_b =Array_a;                   
5            Array_b[0] = 10;                             
6            Console.WriteLine(Array_a[0]); 
7       }
   当程序运行到第3行时,程序先将数组名Array_a压入到线程堆栈中,然后运行到后半部时就会在托管堆中新建一个内存区域来存储该数组,同时Array_a(int)也会指向该托管堆中的地址。运行到第4句时则会将Array_a所指向的地址传给Array_b,此时Array_b也会指向那个新建的数组。第五句时则通过Array_b对此数组进行值更改。也就是对Array_a和Array_b共同指向的托管堆中的内存数组进行修改。运行到第六句时Array_a则会通过指向去读取数组的第一个元素,此时的数据已经被修改,因此会变成10。