Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t C#/.Net是否使用克隆范例?_C#_.net_Programming Languages - Fatal编程技术网

为什么';t C#/.Net是否使用克隆范例?

为什么';t C#/.Net是否使用克隆范例?,c#,.net,programming-languages,C#,.net,Programming Languages,在C#中复制一个集合对象是多么的麻烦,特别是如果你想要一个深度拷贝的话。有没有一个很好的设计理由来解释.Net为什么没有走Java clone()的路线,有没有我在C#/.Net中错过的类似范例?浅拷贝 对于浅拷贝,.NET提供 深度拷贝 对于深度复制,Microsoft建议实施一种自定义的Copy方法。深度复制需要关于类本身的复杂知识——事实上,对于一个给定的类,制作多种不同类型的深度复制可能是有意义的。因此,没有用于此目的的预定义方法或接口 但是iClonable接口呢? 还有一种方法,它的

在C#中复制一个集合对象是多么的麻烦,特别是如果你想要一个深度拷贝的话。有没有一个很好的设计理由来解释.Net为什么没有走Java clone()的路线,有没有我在C#/.Net中错过的类似范例?

浅拷贝

对于浅拷贝,.NET提供

深度拷贝

对于深度复制,Microsoft建议实施一种自定义的
Copy
方法。深度复制需要关于类本身的复杂知识——事实上,对于一个给定的类,制作多种不同类型的深度复制可能是有意义的。因此,没有用于此目的的预定义方法或接口

但是iClonable接口呢?


还有一种方法,它的用途可能大致与Java的
Object.clone
相对应。但是,Microsoft,因为它没有指定正确实现接口所需的副本深度。

因为Java的
clone()
不是深度副本。@John:“新”是什么?你真的能学到一些“新”东西吗?也许你能发现一些新的东西,但你肯定只能学到别人已经发现的东西,因此这些东西不是新的。也许“我不知道!”更合适。。。别担心,别理我,我是个学究@穆塞凡:听说过吗?;)@马修沃森:当然。。。你真的认为我不明白约翰的意思吗?我只是在“拉扯他的腿”,正如人们可能会说的更深入的克隆:对可序列化对象进行深度克隆的另一种方法是简单地序列化它,然后将其反序列化为一个新对象。虽然效率很低,但如果速度不是问题,那也没关系。@MatthewWatson如果你自己编写深度复制代码,速度会快得多,请参见上面的我的链接。当然,编写自己的代码会快得多。这就是为什么我说“虽然效率很低,但如果速度不是问题,那也没关系”。)