文字遊戲-小黑屋
阿新 • • 發佈:2021-08-04
值型別: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;)
}
}