C#中引用类型的问题
在C#的CTS中,有个引用类型叫做object,我们都知道引用类型存储在堆中,而且引用类型特点就是假如有多个指向同一地址的变量,那么改变任一都会使这个引用类型发生改变.
问题来了,在我将object值付给另一个object类型时,好像并没有达到这个效果,而像值类型之间的复制。。。
测试代码如下
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
object object1 = new object();
object1 = "object1 ";
object object2 = object1;
object2 = "object2 ";
Console.WriteLine(object2.ToString());
}
}
}
各位觉得页面应该输出什么呢 ?
分数不多,请大侠多多帮忙 谢谢
------解决方案--------------------不是输出“object2”么?
这有什么疑问么?
------解决方案--------------------object1
又没指向同一个地址
------解决方案--------------------如果是
Console.WriteLine(object1.ToString());
应该输出的 "object1 "
object object2 = object1;//它把 "object1 "地址告诉了object2
如果是
Console.WriteLine(object2.ToString());
它输出的 "object2 "
虽然在创建object2时给了他一个值。
object2 = "object2 ";//现在又把 "object1 "的那个地址盖了
我也是新手,如果不对还请教
------解决方案--------------------object2 = "object2 ";
你已经把object2 改为了string,出现这种情况因为是string的特殊性,具体可以看看msdn关于string的描述
------解决方案--------------------参看以下代码
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
TestObjectClass obcls = new TestObjectClass();
obcls.Name = "user1 ";
object object1 = new object();
object1 = obcls;//object1指向obcls
object object2 = object1;//object2指向object1
obcls.Name = "user2 ";//obcls改变
Console.WriteLine(((TestObjectClass)(object2)).Name);
}
}
class TestObjectClass
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
}