C#——傳值參數(2)。本站提示廣大學習愛好者:(C#——傳值參數(2))文章只能為提供參考,不一定能成為您想要的結果。以下是C#——傳值參數(2)正文
//我的C#是跟著猛哥(劉鐵猛)(算是我的正式教師)《C#言語入門詳解》學習的,微信上猛哥也給我解說了一些不懂得中央,關於我來說幾乎是一筆巨額財富,難得良師!
這次與大家共同窗習C#中的 值參數——援用類型
上篇文章我與大家共同窗習了 值參數——值類型
我們知道:1.值參數創立變量的正本 2.對值參數的改動不會影響變量的值
這次來看 值參數——援用類型,創立新對象
看一個例子:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ParametersSimple 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Student stu = new Student() { Name = "Tom" }; 14 Method(stu); 15 Console.WriteLine(stu.Name); 16 } 17 18 //創立一個叫Method的靜態辦法傳出去的參數是Student類型的參數 19 //辦法內我們創立一個實例並由stu這個參數援用著,新創立的實例名字叫“Mark” 20 static void Method(Student stu) 21 { 22 stu = new Student() { Name = "Mark" }; 23 Console.WriteLine(stu.Name); 24 } 25 } 26 27 class Student 28 { 29 public string Name { get; set; } 30 } 31 }
順序運轉後,窗口內上下兩行辨別顯示:
----------------------------------------------
Mark
Tom
-----------------------------------------------
大家可以自行編譯一下。
解釋:
援用類型存儲的是實例的地址
辦法外的變量stu存儲了對象的地址,傳入辦法裡的值也便是對象的地址,還記著嗎:值參數創立變量的正本 此時辦法內的正本也存儲了這個對象的地址
我們調用辦法後,改動了正本裡的值,也便就是改動了正本裡之前存的地址,換成了一個新地址,那麼自但是然的它指向了一個新對象 還記著嗎:對值參數的改動不會影響變量的值
所以 辦法外的變量照舊指向原來的那個對象,而更改後的正本指向了一個新對象,它們互不影響。
這個例子有個害處,那就是我把辦法內和辦法外的stu的對象的名字都改成一樣的,順序運轉完後屏幕上打印出兩個相反的名字,那麼就無法分辨了。
所以我們要改良!
GetHashCode() 辦法
每個對象的HashCode是不一樣的
所以:
1 namespace ParametersSimple 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Student stu = new Student() { Name = "Tom" }; 8 Method(stu); 9 Console.WriteLine("{0},{1}", stu.GetHashCode(), stu.Name); 10 } 11 12 13 14 static void Method(Student stu) 15 { 16 stu = new Student() { Name = "Tom" };//我把這裡的名字改的和辦法外的一樣了 17 Console.WriteLine("{0},{1}",stu.GetHashCode(),stu.Name); 18 } 19 } 20 21 class Student 22 { 23 public string Name { get; set; } 24 } 25 }
運轉後果
留意到了嗎,名字後面的數值不一樣,闡明他們辨別指向了不同的對象,辦法內的正本指向了一個新的對象
------------------------------------------------------------------------------------------------------------------------
To be Continued!
下篇與大家一同學習 傳值參數--援用類型,不創立新對象,只操作對象
-----------------------------------------------------------------------------------------------------------------------
希望廣闊網友指出問題所在,指出我哪裡了解錯了,共同交流,共同提高!