晕了,关于对象引用

ckao747 2010-01-29 01:18:27
在看JAVA核心技术时候,书上说对象引用是值传递,不太明白,然后我就照着代码把C#的敲出来,试试C#是不是也是这样,结果和JAVA结果一样,真晕,不太明白,C#里边如果传递是对象引用的话,那我在方法里边进行的修改,应该是能影响的啊。。可是为什么不行。。求解。。谢谢
class Program
{
static void Main(string[] args)
{
test a = new test("Alice", 50000);
test b = new test("Bob", 10000);
Console.WriteLine("Before: a=" + a.getname());
Console.WriteLine("Before: b=" + b.getname());
swap(a, b);
Console.WriteLine("After: a=" + a.getname());
Console.WriteLine("After: b=" + b.getname());
Console.Read();
}
public static void swap(test x,test y)
{
test temp = x;
x = y;
y = temp;
Console.WriteLine("End of method: x=" + x.getname());
Console.WriteLine("End of method: y=" + y.getname());
}
}
class test
{
public test(String n, double s)
{
name = n;
salary = s;
}
public string getname()
{
return name;
}
public double getsalary()
{
return salary;
}

private string name;
private double salary;
}
...全文
58 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nashina 2010-01-29
  • 打赏
  • 举报
回复
public string getname()
{
return name;
}
改为:
public string getname()
{
set{return name;}
get{name = value;}
}
ckao747 2010-01-29
  • 打赏
  • 举报
回复
啊原来这样啊。。一直把值传递 值类型和引用传递 引用类型,搞混了。。还以为是一个东西
lemong 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 strwangfan 的回复:]
引用 1 楼 ckao747 的回复:
如果加上ref关键字,就能正常了。。ref不是在传递参数是值类型的时候,才能影响原来的么,我传递的明明是引用类型的啊。


值传递跟引用传递跟你传的是不是引用类型无关。
值传递是把对象拷贝了一份,然后传给函数
引用传递是传递对象的引用,即还是原来的对象。
[/Quote]
引用传递,ref,传递的是指针
值传递,传递的是对象拷贝
swan01 2010-01-29
  • 打赏
  • 举报
回复
不加ref,调用函数时a的值拷贝给x, b的值拷贝给y,xy都是新申请的地址空间。 你修改完x,y, a与b不会有任何改变。加了ref,把a,b的地址传过去了,函数操作的是a,b的内容。
-汪帆- 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ckao747 的回复:]
如果加上ref关键字,就能正常了。。ref不是在传递参数是值类型的时候,才能影响原来的么,我传递的明明是引用类型的啊。
[/Quote]

值传递跟引用传递跟你传的是不是引用类型无关。
值传递是把对象拷贝了一份,然后传给函数
引用传递是传递对象的引用,即还是原来的对象。
-汪帆- 2010-01-29
  • 打赏
  • 举报
回复

这是值传递:
public static void swap(test x, test y) //函数内修改x,y不会影响原x,y的值

这是引用传递:
public static void swap(ref test x, ref test y) //函数内修改x,y会影响原x,y的值

ckao747 2010-01-29
  • 打赏
  • 举报
回复
如果加上ref关键字,就能正常了。。ref不是在传递参数是值类型的时候,才能影响原来的么,我传递的明明是引用类型的啊。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧