问一个简单的问题~关于对象的引用
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的值就变咯。