作者schizophrena (你很记者你很脑残)
看板C_Sharp
标题[问题] call by value的问题
时间Fri Sep 1 10:52:42 2017
我写了一个程式
public class classA
{
public int a;
public int b;
public void classA(int _a, int _b)
{
a = _a;
b = _b;
}
}
public class useClassA
{
public callbyValue(classA obj)
{
obj.a = 1;
obj.b = 2;
}
public callbyRef(ref classA obj)
{
obj.a = 3;
obj.b = 4;
}
}
static void Main()
{
classA test_a = new classA(-1,-2);
useClassA test_use = new useClassA();
// test_a.a = -1
// test_a.b = -2
test_use.callbyValue(test_a)
// 照我对C#的理解
// 这时test_a的成员数值在这函式里应该没有被修改
// 所以应该还是维持 -1, -2
test_use.callbyRef(ref test_a);
// 我个人理解
// 这时test_a的成员才会被改成 3,4
}
可是没想到, 在
test_use.callbyValue(test_a)後
test_a里的成员就被改成 1, 2了.....
这和我脑中的call by value和 call by reference的概念不一样呀~~~
有人可以解惑吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.216.55.178
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1504234365.A.EAA.html
1F:→ modog: class本身就是reference type 09/01 11:03
2F:→ schizophrena: 谢谢 09/01 11:07
4F:推 s4300026: 你传入的是class的指标值跟址 09/01 18:18
5F:推 s4300026: 如果你在方法里面new,call by value是区域变数的值被ne 09/01 18:26
6F:→ s4300026: w, 不影响外面的class,call by ref 是把外面的址复制 09/01 18:26
7F:→ s4300026: 到区域变数,new会影响外面的class 09/01 18:26
8F:推 s4300026: 也就是一个是指标,一个是指标的指标,建构起全部都是 09/01 18:28
9F:→ s4300026: 物件导向的写法,我觉得啦 09/01 18:28
10F:推 CloudyWing: ref type的变数存的是实体位置,所以效果乍看很像 09/03 16:34
11F:→ CloudyWing: 你如果在method里把变数设为null或是new一个新物件就 09/03 16:35
12F:→ CloudyWing: 看得出差别 09/03 16:35