object.CLONE()是浅拷贝还是深拷贝?

时间:2023-01-23 19:51:26
         Hashtable temp = (Hashtable)ControlList.Clone();
            foreach (DictionaryEntry de in temp)
            {
                if (!(de.Value is WebControl))
                {
                    ControlList.Remove(de.Key);
                }
            }
由此可见,应该是深拷贝才对。但注释写的是shallow copy ,不解中。。。

12 个解决方案

#1


自已顶 个

#2


你是怎么看是的呢?我却看是出浅
拷贝

#3


 ControlList.Remove(de.Key); 如果不出错,说明什么问题?

#4


http://www.siruo.net.cn/pubnews/HTML/785.html

#5


引用 2 楼 cpp2017 的回复:
你是怎么看是的呢?我却看是出浅
拷贝


#6


未了说明什么?

#7


以上代码是不出错的,是对的。如果是浅拷贝,就应该就是指的同一地址吧,在foreach中肯定会出错的呀

#8


浅拷贝也不会指向同一个地址,只是指向一个引用。因为原来的HashTable每一个Key都有一个引用

而如果是一个person
大家都去引用这个person
则就会出错了。

引用 7 楼 shankaipingo 的回复:
以上代码是不出错的,是对的。如果是浅拷贝, 就应该就是指的同一地址吧,在foreach中肯定会出错的呀

#9


Clone是浅拷贝 Copy是深拷贝

#10


object 难道有默认实现的 Clone 方法?

实现 IClonable.Clone 一般是为了深拷贝,但是怎么 深,是由实现着决定的!

object.MemberwiseClone 是浅拷贝

#11


错了,是浅拷贝。打个比喻,要是你住在一栋大厦的一间房,然后将大厦炸掉,当然你的房子也给炸掉了。浅拷贝有引用地址,而引用的地址指向实际地址,因此删掉引用必然会删除实际地址的。

#12


哦,我明白了,都是引用。。。

#1


自已顶 个

#2


你是怎么看是的呢?我却看是出浅
拷贝

#3


 ControlList.Remove(de.Key); 如果不出错,说明什么问题?

#4


http://www.siruo.net.cn/pubnews/HTML/785.html

#5


引用 2 楼 cpp2017 的回复:
你是怎么看是的呢?我却看是出浅
拷贝


#6


未了说明什么?

#7


以上代码是不出错的,是对的。如果是浅拷贝,就应该就是指的同一地址吧,在foreach中肯定会出错的呀

#8


浅拷贝也不会指向同一个地址,只是指向一个引用。因为原来的HashTable每一个Key都有一个引用

而如果是一个person
大家都去引用这个person
则就会出错了。

引用 7 楼 shankaipingo 的回复:
以上代码是不出错的,是对的。如果是浅拷贝, 就应该就是指的同一地址吧,在foreach中肯定会出错的呀

#9


Clone是浅拷贝 Copy是深拷贝

#10


object 难道有默认实现的 Clone 方法?

实现 IClonable.Clone 一般是为了深拷贝,但是怎么 深,是由实现着决定的!

object.MemberwiseClone 是浅拷贝

#11


错了,是浅拷贝。打个比喻,要是你住在一栋大厦的一间房,然后将大厦炸掉,当然你的房子也给炸掉了。浅拷贝有引用地址,而引用的地址指向实际地址,因此删掉引用必然会删除实际地址的。

#12


哦,我明白了,都是引用。。。