作者lovemsms (love.ms)
站內C_Sharp
標題[問題] struct的一個問題
時間Sun Oct 23 17:26:12 2011
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)
1F:推 piadoro:因為 class是 reference type 10/23 17:58
2F:→ 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)
3F:推 LaPass:要用unsafe把用到指標的地方包起來,太久沒寫我忘記,請看 10/23 22:20
4F:→ LaPass:msdn查詢詳細寫法。 10/23 22:21
5F:推 tomex:value type在函式傳入時,會被複製一個新的物件,故B值不變 10/27 11:04
6F:推 tomex:使用unsafe頻繁切換會對程式有較hugh的耗能損耗,詳見google 10/27 11:06