發表文章

目前顯示的是有「C#」標籤的文章

C# 參數傳遞心得

C# 參數傳遞模式預設為「傳值」,也就是程序甲呼叫程序乙,並傳參數A給時,參數A是以一個副本的概念傳遞。 所以對於 實值型別 (如整數、字元、結構等)而言,A傳遞到乙的時候,是以一個跟A 有相同的內容實值 的另一個變數過去,也就是在甲中的A與乙的A是兩個具有相同內容、但儲存在記憶體不同位址的變數。 對於 參考型別 (如字串、類別)而言,是複製一個 指向位於heap中相同位址的變數 ,所以甲和乙各有一個變數(即A)指向一個相同的內容值(A所參考指向的物件)。 因此,假設在乙的過程中更改A的內容值,自乙離開後回到甲後,查看A的內容結果:對實值型別來說,A並沒有改變,也就是乙裡面做的改變並未影響甲的A;對參考型別來說,只要沒有更動A變數的參考(後述),則A是改變過的。 Ex: 整數參數 void 甲() { int A=1; // 查看A會等於 1 乙(A); // 查看A會等於2 } void 乙(int A) { A=A+1; } 物件參數 class C1 { string str1; public C1() { } public string Str1 { get{ return str1;} set { str1 = value; } } } void 甲() { C1 A = new C1(); A.Str1 = "ABC"; // 查看A的屬性St1會等於 ABC 乙(A); // 查看A的屬性St1會等於 ABCchanged } void 乙(C1 A) { C1.Str1 = C1.Str1 +"changed"; } 字串參數 void 甲() { string A="ABC"; // 查看A會等於 ABC 乙(A); // 查看A會等於ABC changed } void 乙(string A) { A=A+"changed"; } 至於更動參考型別的變數參考,是指在乙重新指派新的值給他,一般都是 透過 new 關鍵字 ,此時候在乙中對A嘗試修改都不會影響甲的A(如上述的字串參數)。 當甲的A有需要允許在乙中被更動時,可以透過「參數傳遞模式(parameter passing mode)關鍵字來將乙的A變更帶回甲中。 關鍵字有: " out ":限...