程序如下:class T
    {
        public int i;
        public object GetCopy()
        {
            return MemberwiseClone();
        }
    }
    class Test
    {
        static void Main()
        {
            T obj = new T();
            obj.i = 2;
            T obj2 = (T)obj.GetCopy();
            obj2.i = 4;
            Console.WriteLine("{0},{1}",obj.i, obj2.i);        }
    }为什么 obj.i与obj2.i的值不同的呢?引用的不是同一对象吗?为什么会这样?

解决方案 »

  1.   

        class T
        {
            public int i;
            public object GetCopy()
            {
                return this;
            }
        }
        class Test
        {
            static void Main()
            {
                T obj = new T();
                obj.i = 2;
                T obj2 = (T)obj.GetCopy();
                obj2.i = 4;
                Console.WriteLine("{0},{1}", obj.i, obj2.i);        }
        }这样才是浅复制
      

  2.   


        public class Content
        {
            public int Val;
        }
        public class Cloner
        {
            public Content MyContent = new Content();
            public Cloner(int newVal)
            {
                MyContent.Val = newVal;
            }
            public object GetCopy()
            {
                return MemberwiseClone();
            }
            static void Main()
            {
                Cloner mySource = new Cloner(5);
                Cloner myTarget = (Cloner)mySource.GetCopy();
                Console.WriteLine("myTarget.mycontent.val={0}", myTarget.MyContent.Val);
                mySource.MyContent.Val = 2;
                Console.WriteLine("{0},{1}", myTarget.MyContent.Val, mySource.MyContent.Val);
            }
        }这里也是用的整型,怎么就可以呢?
      

  3.   

    你定义了这个类    public class Content
        {
            public int Val;
        }然后在Cloner里是Content MyContent = new Content();的,这样就不是数值类型了。
      

  4.   

    回复于:2008-07-31 17:28:45i 是整数类型, 也就是简单类型,这些类型在浅度复制或深度复制的时候都会复制其值 
    如果我用string类型代替int
    string是引用类型,那它经过浅复制会得出相同的数据吗?