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

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; }
}

}
}