求解释

lulianqi 2015-06-30 01:18:13

class cs
{
public string str;
}

static void FillCs(cs yourCs)
{
if(yourCs==null)
{
yourCs = new cs();
yourCs.str = "myTest";
}
else
{
yourCs.str = "myTest";
}
}


然后

cs myCs=null;
FillCs(myCs);


执行完成后myCs依然为空null
进入方法时myCs提前赋值,或者使用out就正常了myCs也就不为空了

难道FillCs取参数值的时候就取的是传入参数指向的空间,并不是取我传入参数本身

求知情人解释

...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lulianqi 2015-06-30
  • 打赏
  • 举报
回复
引用 6 楼 zhouqinghe24 的回复:
形参和实参是两个变量.
还自己画了个图。。。十分感谢
瑞卡哥哥 2015-06-30
  • 打赏
  • 举报
回复


形参和实参是两个变量.
smthgdin_020 2015-06-30
  • 打赏
  • 举报
回复
方法参数,如果不使用ref和out,对于值类型是复制值,对于引用类型是复制引用,你方法理new一个新的cs类再赋值,这时候yourCS指向新的引用和原来的已经没关系了。
smthgdin_020 2015-06-30
  • 打赏
  • 举报
回复
若你方法中要对方法参数yourCs重新赋值,那就用ref 修饰。用out是必须对yourCs重新赋值。或者你在外面new完再传进入,然后对其属性赋值。
bdmh 2015-06-30
  • 打赏
  • 举报
回复
yourCs = new cs();,你重新创建的是局部变量,并没有修改你传入的参数,要修改传入参数,使用ref或out
  • 打赏
  • 举报
回复
static void FillCs(ref cs yourCs) 虽然引用类型,但你内部是new重新分配空间了,所以外部要一致的话需要ref
皮特胖胖 2015-06-30
  • 打赏
  • 举报
回复
类是引用类型,不是值类型,传递null进去,重新实例化是传不出来的

110,534

社区成员

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

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

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