首页 新闻 搜索 专区 学院

关于引用类型ref的疑问

0
悬赏园豆:15 [已解决问题] 解决于 2014-03-04 10:24

运行后list的count都是3,记得引用类型传入到其他方法后就会发生深拷贝,复制一个对象而不是在原来的基础上进行修改,但是以上2坨代码执行后list的count都是3,求解释。。。

tongling的主页 tongling | 初学一级 | 园豆:30
提问于:2014-03-04 09:40
< >
分享
最佳答案
0

引用传入的目的就是想要在过程中修改对象值可以传回原来的对象,你刚刚好记反了。

收获园豆:15
爱编程的大叔 | 高人七级 |园豆:30753 | 2014-03-04 09:56

既然对于引用类型用ref跟不用一个样,那还显式的加个ref干嘛?不明觉厉呀

tongling | 园豆:30 (初学一级) | 2014-03-04 10:13

@那一年的码农: 

这个比较高深一点点,你不明白可以先不明白,Just a joke.

两种情况是不同的

Sub MyProcedure(byval I as integer)

end sub

 

Sub MyProcedure(byref I as integer)

end sub 

 

Sub MyProcedure(byval myObject as myClass)

  myobject.name="new name"

end sub 

 

sub MyProcedure(byref myobject as myclass)

  myobject.name="new name"

end sub 

你把4个过程自己测试一下看看就知道差别是什么了。

注意,重要的差别是Integer和Myclass。

你在外面随便写个测试过程,看看执行完以后I和MyOject.name是否改变。

爱编程的大叔 | 园豆:30753 (高人七级) | 2014-03-04 10:24

@那一年的码农: 把你的代码稍微修改下,你就知道 ref 关键字的作用,

static AddList(List<string> list)

{

    list = new List<string>();

     list.Add("1");
}

 

static AddList(ref List<string> list)

{

    list = new List<string>();

     list.Add("1");

}

 

Launcher | 园豆:45045 (高人七级) | 2014-03-04 11:27
其他回答(2)
0

你记错了。我就不用解释了吧。

Launcher | 园豆:45045 (高人七级) | 2014-03-04 09:42
0

http://www.cnblogs.com/sujiantao/archive/2011/12/16/2289303.html 

tongling | 园豆:30 (初学一级) | 2014-03-04 10:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册