在c#里所有的类型都可以区分为值类型或引用类型,两者之间的区别在于内存的分配,值类型变量直接分配在堆栈里面,而引用类型是在堆栈上分配变量,其值是指向一个托管堆的内存地址。基于这个特性,所有的值类型在值发生变更时都是直接改变变量本身,引用类型在值发生变更时,变化的是对应的变量值,而引用还是原来的。在对象复制时需要特别注意这一特性。
string是特殊的引用类型,一旦定义就不能发生变更,改变string类型变量后,会产生一个新的变量,然后引用会指向新变量。
类,接口,string都是引用类型,所有的数字类型,日期类型,结构体都是值类型。