一、值类型:int double char decimal bool enum struct
二、引用类型:string 数组 自定义 集合 object 接口
三、值传递和引用传递
值类型在复制的时候,传递的是这个值的本身
int n1 = 10; int n2 = n1; n2 = 20; Console.WriteLine(n1); Console.WriteLine(n2);
输出:
10
20
引用类型在复制的时候,传递的是对这个对象的引用
class Program { static void Main(string[] args) { Person p1 = new Person(); p1.Name = "张三"; Person p2 = p1; p2.Name = "李四"; Console.WriteLine(p1.Name); Console.WriteLine(p2.Name); Console.ReadKey(); } } public class Person { private string _name; public string Name { get { return _name; } set { _name = value; } } }
输出:
李四
李四
四、原因解释
值类型是存储在栈中的,而引用类型是存储在堆中;值类型在传递的时候,传递的是值的本身,而引用类型则是传递多的是地址
Rerson p2=p1;传递的仅仅是地址,p1与p2指向的是堆中的同一块存储单元,所以无论是p1的值还是p2的值发生改变,两者的值都会发生改变;
五、引用中的特殊例子,string类型
由于string类型具有唯一不变性;所以它的传递与值类型的相同;
string s = "abc"; string s2 = s; s = "jc"; Console.WriteLine(s); Console.WriteLine(s2);
输出:
jc
abc