日期:2014-05-19  浏览次数:20779 次

问一个简单的问题~关于对象的引用
class   a
        {
                public   a(string   name,int   age)
                {
                }
                public   string   name;
                public   int   age;
        }
  a   A   =   new   a( "danny ",   20);
                        a   B   =   A;
                        MessageBox.Show(B.name   +   "     "   +   B.age);
                        B.age   =   21;
                       
                        B.name   =   "danny ";
                        MessageBox.Show(A.name   +   "       "   +   A.age);
第二句是什么意思
有没有可以完全的解释一下~我的理解本来就是创建一个对象B~而这个对象B   相当于A~但试了一试~这是可以当作引用

如果是可以当作引用的话,那为什么第一次的Messagebox.show   显示的是B.的默认值?
也就是name=空   age=0
而接下来通过对对象B的成员设置~
从而改变了A,结果第二次messagebox显示A的成员被修改了

问题就在这里了如果我的了解没有错的话~那为什么B的成员会是默认值?   而不是把B所有的成员的值设置成A的成员
如果我要显示A对象的成员的值~完全赋值给B对象应该怎么做?
其他.net   本来的类~基本上都有一个Clone   方法
如果我不用方法来实现应该怎么做?
请高手指点

------解决方案--------------------
class a
{
public a() { }

public a(string name,int age)
{
this.Age = age;
this.Name = name;
}
private string _name;
private int _age;
public string Name
{

get { return _name; }
set { _name = value; }

}
public int Age
{
get { return _age; }
set { _age = value; }

}
}
------解决方案--------------------
a A = new a( "danny ", 20);//这句会实例化一个类a的对象,并且用调用构造函数,但是你的构造函数是空的,所有name是null,age=0
a B = A; //实例化一个类a的实例B并且用A来初始化,也就是B是A的引用 你可以这么理解,此时A就是B,B就是A
MessageBox.Show(B.name + " " + B.age);//此时name还是null
B.age = 21;

B.name = "danny ";
MessageBox.Show(A.name + " " + A.age); //因为B是A的引用,所有对B对象的修改其实也相当于对A做了修改,因为他们指向的是堆中的一个地方的数据。所以A的值就变咯。