C#中函数参数传递的问题

lmxmx 2011-02-22 05:45:02
比如说我在窗体new了一个类:
MyClass obj = new MyClass;

同时窗体中还有一个函数,原型如下:
void HandleUserObj(MyClass x){}

那么我在使用HandleUserObj(obj)调用该函数时,
传到函数中的obj是引用还是副本?

如果是引用,那么函数原型的声明中为什么没有ref关键字?
如果是副本,是不是意味着我在函数中对obj的修改不会影响到函数外的obj?

...全文
100 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lmxmx 2011-02-23
  • 打赏
  • 举报
回复
结贴碰到了著名的"404错误"

耐心等一段时间,CSDN会更新数据的……

TMD,碰到好几次了……
lmxmx 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 nianhui 的回复:]
传递的是引用的副本。默认的参数传递都是传值,如果是是类型则传递值的拷贝,如果是引用类型则传引用的拷贝,都会存在副本。out,ref关键字表示传的是“地址”,值类型数据的值地址,引用类型的引用地址,而不存在拷贝的副本。
举个例子:
你的obj是个引用类型的对象,“引用”也是有内存地址的,它指向实质的数据,默认的参数传递是把该地址的内容拷贝一份,出现了两个引用,这两个引用指向同一数据。但是引用传……
[/Quote]

恩,明白了……
#blackheart 2011-02-22
  • 打赏
  • 举报
回复
传递的是引用的副本。默认的参数传递都是传值,如果是是类型则传递值的拷贝,如果是引用类型则传引用的拷贝,都会存在副本。out,ref关键字表示传的是“地址”,值类型数据的值地址,引用类型的引用地址,而不存在拷贝的副本。
举个例子:
你的obj是个引用类型的对象,“引用”也是有内存地址的,它指向实质的数据,默认的参数传递是把该地址的内容拷贝一份,出现了两个引用,这两个引用指向同一数据。但是引用传递的意思是传的这个内存地址,就是说是同一个引用,明白了吧
lmxmx 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 army369168520 的回复:]
MyClass obj = new MyClass; --只是实例化1个对象
void HandleUserObj(MyClass x){} --函数方法

那么我在使用HandleUserObj(obj)调用该函数时, 返回的是一个obj集合
[/Quote]

“返回的是一个obj集合”是什么意思?
army369168520 2011-02-22
  • 打赏
  • 举报
回复
MyClass obj = new MyClass; --只是实例化1个对象
void HandleUserObj(MyClass x){} --函数方法

那么我在使用HandleUserObj(obj)调用该函数时, 返回的是一个obj集合
#blackheart 2011-02-22
  • 打赏
  • 举报
回复
传递的是引用的副本。默认的参数传递都是传值,如果是是类型则传递值的拷贝,如果是引用类型则传引用的拷贝,都会存在副本。out,ref关键字表示传的是“地址”,值类型数据的值地址,引用类型的引用地址,而不存在拷贝的副本。
  • 打赏
  • 举报
回复
MyClass obj = new MyClass;
它是new的!
lizhibin11 2011-02-22
  • 打赏
  • 举报
回复
c#中类和数组的传递全部都是"引用",如果在函数中修改,会影响到"函数外的obj",基本数据类型如int等是值的拷贝,这些要在函数中修改时,需要加ref out

110,525

社区成员

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

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

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