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!
下篇與大家一同學習 傳值參數--援用類型,不創立新對象,只操作對象
-----------------------------------------------------------------------------------------------------------------------
希望廣闊網友指出問題所在,指出我哪裡了解錯了,共同交流,共同提高!