C#之二 值傳遞和引用傳遞
阿新 • • 發佈:2019-02-02
常用的值型別有:int double char bool decimal struct enum;
常用的引用型別有:string 陣列 自定義類 介面 委託;
值型別的值儲存在記憶體的棧上,引用型別的值儲存在堆中,棧上儲存資料的效率要高於堆。
所謂值傳遞:把值型別作為引數傳遞,把值本身進行傳遞。通過關鍵字ref可以把值傳遞改變為引用傳遞。
而引用傳遞:把引用型別的值作為引數傳遞,傳遞的是引用,也就是常說的地址。
通過VS的既時視窗可以檢視某個變數的資訊,值型別a,輸入&a,可以得出a在棧中的地址好值,引用型別得出的是在棧和隊中的地址
static void Main(string[] args) { //值傳遞 int number = 20; Fun(number);//實參 Console.WriteLine(number); Console.ReadKey(); } static void Fun(int num)//形參 { num += 20; }
//輸出:20
//如果是
static void Main(string[] args)
{
//值傳遞
int number = 20;
Fun(ref number);//實參
Console.WriteLine(number);
Console.ReadKey();
}
static void Fun(ref int num)//形參
{
num += 20;
}
//輸出:40
//輸出:李四static void Main(string[] args) { Person zsPerson = new Person(); zsPerson.Name = "張三"; Person lsPerson = zsPerson; lsPerson.Name = "李四"; Console.WriteLine(zsPerson.Name); Console.WriteLine(lsPerson.Name); Console.ReadKey(); } class Person { public string Name { get; set; } }
李四
//輸出:小仙女static void Main(string[] args) { Person zsPerson = new Person(); zsPerson.Name = "楊過"; Test(zsPerson); Console.WriteLine(zsPerson.Name); Console.ReadKey(); } static void Test(Person p) { p.Name = "小仙女"; Person p2 = new Person(); p2.Name = "小龍女"; p = p2; } } class Person { public string Name { get; set; } }