值类型与引用类型

     C#中一个参数的类型有值类型与引用类型,像int、bool、double、decimal、char、struct、enum等是属于值类型,而像string、自定义类、数组等是属于引用类型

     (1)值类型继承自System.valueType,而引用类型继承自System.Object。

     (2)值类型的长度是固定的,引用类型的长度是可变的,并且值类型的值不能为null,如果要将值类型的值赋值为null,就要将值类型定义为可空的类型  int? a=null;

     (3)在储上值类型存储在栈中,而引用引用类型存储在堆中,引用类型同样在栈中开辟了空间,用来存放指向堆中的地址

      

//定义一个Person类
public class Person
{
public string Name{get;set;}
public int Age{get;set;}
}
public void Fun()
{
Person p=new person();
p.name="11";

Person p1=p;//把p在栈中开辟的地址复制给p1,这样p1就指向p在堆中开辟的空间
p1.name="22";
console.writeline(p.name)//输出的结果是"22";
};
Person p1=p是把p在栈中开辟的地址假设为0x0001,这个地址指向的是p在堆中开辟的一块空间,赋值给了p1,这样p1的地址也就为0x0001,这样p1就指向了0x0001这个地址指向的空间

      而引用类型中string作为一个特殊的存在,具有不可变性的特点

string str1 = "aa!";
string str2 = "bb";
string str3 = str2;
Console.WriteLine("{0} {1} {2}", str1, str2,str3);

//输出的结果是  aa bb bb

原文地址:https://www.cnblogs.com/Opiece/p/4657922.html