值传递和引用传递
值类型:int double char decimal bool enum struct
引用类型:string 数组 自定义类 集合 object 接口
值传递和引用传递
//值传递和引用传递 int n1=10; int n2=n1; n1=20 Console.WriteLine(n1); Console.WriteLine(n2); Console.ReadKey();
值类型在复制的时候,传递的是这个值的本身
引用类型在复制的时候,传递的是对这个对象的引用
就是说传递的是堆中的地址,在栈里显示的是堆的地址,然后堆中存的才是那个值,在外面操作这个值的时候,跟他共用的那个也会随着改变
string 的不可变性 每次给string类型的参数赋值时,都会重新开辟空间来进行存储,这是跟别的引用类型不一样的地方,其他的引用类型在首次赋值之后,每次赋值都是改变堆中那个地址的值,而string每次都重新开辟新空间。值类型的赋值以及复制,都是对值进行操作,不是地址。
public class Person() { private string _name; public string Name { get(return _name;) set(_name=value;) } } 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(); } }
答案出来应该是两个李四
static void Main(string[] args) { Person p =new Person; p.Name="张三"; Test(p); Console.WriteLine(p.Name); Console.ReadKey(); } public static void Test(Person pp) { Person p=pp; p.Name="李四"; }
public class Person()
{
private string _name;
public string Name
{
get(return _name;)
set(_name=value;)
}
}