在一个aspx代码文件中:
public class A {
public string a;public A()
{a="";
}
}
public class webform1: System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
                             ArrayList test=new ArrayList();
                             A  abc=new A();
                                abc.a="1";
                              test.Add(abc);
                               abc.a="2";
                              test.add(abc);
                                                          
}
}为什么test中两个对象元素的a成员值都为2?

解决方案 »

  1.   

    试试:

    abc.a="2";
    test.add(abc);
    改成:
    abc=new A();
    abc.a="2";
    test.add(abc);
      

  2.   

    还有,后面的应该是:
    test.Add(abc);
    不是
    test.add(abc);
      

  3.   

    因为你定义了A的一个实例abc
    会在内存中分配一块地址给abc 也相应的给他的参数a一个地址。
    第一次你用abc.a="1"的时候把1放到了那个地址里面。第二次abc.a="2"的时候因为还是一个类的实例,a的地址没变。只是把里面的1换成了2。所以再调用的时候a的值就是2了
      

  4.   

    因为引用类型是保存在堆上,ArrayList里的实例只是指向同一个地址(也就是同一个实例)详细参考C#高级编程第二版,那讲的比较清楚.
      

  5.   

    你调用了两个类实体
    两次调用完全是独立进行的
    但是,你只定义了一个实体对象
    当第一次调用,a值是1
    但是,紧接着你就将abc实体的a值改为了2