说道值类型和引用类型,在C#中,官方的说法就是:数组
值类型直接指向数据;通常包括C#自带的全部数字类型,字符类型,bool类型,固然还有自定义的结构类型和枚举类型ide
而引用类型则是指向数据存储的地址。通常指全部类,数组,代理和接口类型。请注意还包括字符类型spa
值类型与引用类型的根本区别就是它们在内存中处理的方式:代理
值类型的内容仅仅就是对类型的值;为一个值类型实例赋值老是赋值这个值的实例。好比 int a=1; int b=a;那么为b赋值的时候,就是把a的值复制一份,在内存中心建立一块区域保存b的值。a和b的存储是独立的。code
而引用类型比值类型复杂,引用类型包括两部分:对象和指向对象的引用。引用类型变量是指向包含值的对象的引用。好比class a=new class(); class b=a;那么为b赋值的时候,仅仅把a的引用地址复制给b。这样a和b就指向内存中的同一个地址。a和b是关联的。对象
下面咱们来举一个例,来讲明值类型和引用类型在内存中的差异:blog
public class Staff { public string FirstName { get; set; } public string LastName { get; set; } public int Salary { get; set; } } public struct Employee { public string FirstName{get;set;} public string LastName { get; set; } public int Salary { get; set; } } ... private static void Demo() { Staff s1 = new Staff { FirstName = "123" }; Staff s2 = s1; s2.FirstName = "abc"; Employee e1 = new Employee { FirstName = "123" }; Employee e2 = e1; e2.FirstName = "abc"; Console.WriteLine("s1="+s1.FirstName+", e1=" + e1.FirstName) }
输出结果为:s1=abc, e1=123
注意s1为引用类型,e1为结构类型(值类型)接口