[問題] struct的一個問題

看板C_Sharp (C#)作者 (love.ms)時間13年前 (2011/10/23 17:26), 編輯推噓4(402)
留言6則, 3人參與, 最新討論串1/1
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)

10/23 17:58, , 1F
因為 class是 reference type
10/23 17:58, 1F

10/23 17:59, , 2F
struct則是data type,前者是call by reference後者是value
10/23 17:59, 2F
謝謝 不過因為我有學過C++ 所以將片段程式碼改為 static public void E(B* yyy) //改為傳指標 { yyy->b = 0; } 然後將Main底下改用傳址 E(&bbb); //改為傳址 出現錯誤 指標和固定大小緩衝區只能使用於 unsafe 內容中 然後按照網路上說明將屬性->建置 裡面將容許unsafe程式碼打勾 不過還是無解...... ※ 編輯: lovemsms 來自: 111.252.74.232 (10/23 18:53)

10/23 22:20, , 3F
要用unsafe把用到指標的地方包起來,太久沒寫我忘記,請看
10/23 22:20, 3F

10/23 22:21, , 4F
msdn查詢詳細寫法。
10/23 22:21, 4F

10/27 11:04, , 5F
value type在函式傳入時,會被複製一個新的物件,故B值不變
10/27 11:04, 5F

10/27 11:06, , 6F
使用unsafe頻繁切換會對程式有較hugh的耗能損耗,詳見google
10/27 11:06, 6F
文章代碼(AID): #1EezsuGa (C_Sharp)
文章代碼(AID): #1EezsuGa (C_Sharp)