C#——傳值參數(3)。本站提示廣大學習愛好者:(C#——傳值參數(3))文章只能為提供參考,不一定能成為您想要的結果。以下是C#——傳值參數(3)正文
上篇文章我與大家共同窗習了 值參數——援用類型
這次與大家共同窗習 傳值參數--援用類型,不創立新對象,只操作對象
這是個思想導圖:
我們仍需記住:1.值參數創立變量的正本 2.對值參數的改動不會影響變量的值
看一個例子:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Student stu = new Student() { Name = "Elliot" }; 6 Console.WriteLine("Name is {0}, HashCode is {1}", stu.Name, stu.GetHashCode()); 7 UpdateObject(stu); 8 //調用辦法後我們再打印一遍 9 Console.WriteLine("Name is {0}, HashCode is {1}", stu.Name, stu.GetHashCode()); 10 11 } 12 13 //沒有創立新對象 14 static void UpdateObject(Student stu) 15 { 16 stu.Name = "Mark"; 17 Console.WriteLine("Name is {0}, HashCode is {1}",stu.Name,stu.GetHashCode()); 18 } 19 } 20 21 class Student 22 { 23 public string Name { get; set; } 24 } 25 }
運轉後果:
看:
第一行是我們在Main辦法裡創立一個對象後立刻打印出他的名字和hashcode;
第二行則是UpdateObject辦法裡打印的;
第三行則是在調用完辦法後又打印了一遍
發現後兩行是完全一樣的
解釋:
援用類型的變量存儲的是對象在堆內存中的地址,傳出去的參數是變量的一個正本,所以它們都存儲的是對象的地址,我們經過參數訪問了對象,修正了對象裡的值,由於變量和參數都指向的是同一個對象,所以它們的名字就變得一樣,而hashcode不斷一樣。
對象還是那個對象,但對象裡的值改動了
這就是我們用值參數只更新對象而不創立新對象
留意:
在理想任務中,像這樣經過傳出去的參數改動對象裡的值的狀況是少見的,由於辦法次要輸入還是靠前往值,我們把這種經過傳出去的參數改動對象裡的值的操作叫做某個辦法的反作用(side-effect),任務中要盡量防止這種反作用。
------------------------------------------------------------------------------------------------
To be continued!
下篇與大家共同窗習 援用參數
------------------------------------------------------------------------------------------------
希望大家積極評論,指出我的問題所在,共同交流,共同提高!