看板 C_Sharp 關於我們 聯絡資訊
public class A { public int a; } public struct B { public int b; } public class practice02 { static public void D(A xxx){ xxx.a = 0; } static public void E(B yyy) { yyy.b = 0; } public static void Main(string[] args) { A aaa = new A(); B bbb = new B(); aaa.a = 5; bbb.b = 5; D(aaa); E(bbb); Console.WriteLine(aaa.a); //5->0 Console.WriteLine(bbb.b); //5->5 Console.ReadKey(); } } 我的問題是為何E(bbb)不會改變bbb.b的值 也就是struct和class在這裡有啥不同之處呢 = = 上網查了一下只知道struct和class的default access level 不過這裡已經都宣告public了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.252.74.232 ※ 編輯: lovemsms 來自: 111.252.74.232 (10/23 17:29)
piadoro:因為 class是 reference type 10/23 17:58
piadoro:struct則是data type,前者是call by reference後者是value 10/23 17:59
謝謝 不過因為我有學過C++ 所以將片段程式碼改為 static public void E(B* yyy) //改為傳指標 { yyy->b = 0; } 然後將Main底下改用傳址 E(&bbb); //改為傳址 出現錯誤 指標和固定大小緩衝區只能使用於 unsafe 內容中 然後按照網路上說明將屬性->建置 裡面將容許unsafe程式碼打勾 不過還是無解...... ※ 編輯: lovemsms 來自: 111.252.74.232 (10/23 18:53)
LaPass:要用unsafe把用到指標的地方包起來,太久沒寫我忘記,請看 10/23 22:20
LaPass:msdn查詢詳細寫法。 10/23 22:21
tomex:value type在函式傳入時,會被複製一個新的物件,故B值不變 10/27 11:04
tomex:使用unsafe頻繁切換會對程式有較hugh的耗能損耗,詳見google 10/27 11:06