一点疑惑

dqjia 2007-03-27 11:31:29
public class MyClass
{
private string name;

public MyClass(string s)
{
name = s;
}

public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
}

//another class
public void Test()
{
ArrayList lst = new ArrayList();
MyClass c = new ("abc");
lit.Add(c);
c = null;
MyClass c1 = lst[0] as MyClass;
if (c1 != null)
{
Console.WriteLine(c1.Name);
}
}

为什么在Test中把c设成null不影响lst中的值呢?
...全文
303 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
CathySun118 2007-03-27
  • 打赏
  • 举报
回复
ArrayList是属于值类型的
你执行lit.Add(c);就是把c的值加入到了lst
在把c = null;对lst没有影响,呵呵
dqjia 2007-03-27
  • 打赏
  • 举报
回复
明白了
结帖
danjiewu 2007-03-27
  • 打赏
  • 举报
回复
lit.Add(c);这个可以理解为list把c的地址复制并加进了列表里。
之后你再修改c的地址并不影响lit里保存的地址。
honkerhero 2007-03-27
  • 打赏
  • 举报
回复
我想它存的是地址,但不是C对象的地址,是C对像所指的地址
也就是对C对象所指的地址做了另一次引用,你把C变为NULL,只是让C不再指向以前的地址
跟LIST中的对象无关系,如果你C。NAME = null,就影响了
cctaiyang 2007-03-27
  • 打赏
  • 举报
回复
因为执行了这个lit.Add(c);
tl_pear 2007-03-27
  • 打赏
  • 举报
回复
对ArrayList是属于值类型的。不是引用类型的。呵呵!
dqjia 2007-03-27
  • 打赏
  • 举报
回复
好像不是这样吧
public void Test()
{
ArrayList lst = new ArrayList();
MyClass c = new ("abc");
lit.Add(c);
c.Name = "bcd";
c = null;
MyClass c1 = lst[0] as MyClass;
if (c1 != null)
{
Console.WriteLine(c1.Name);
//输出为bcd why?
}
}
Red_angelX 2007-03-27
  • 打赏
  • 举报
回复
相当于
lit.Add(c.Clone());
Red_angelX 2007-03-27
  • 打赏
  • 举报
回复
ArrayList中存的是值不是地址

110,537

社区成员

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

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

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