作者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