C#如何正确的做深拷贝
【今日推荐】:为什么一到面试就懵逼!>>> 估计很多人在网上看到各种各样的DeepClone实现, 例如: 1. 通过BinaryFormatter进行二进制序列化 这玩意儿序列化出来的东西还带namespace类型, 尺寸非常大, 调试一下就知道极其不靠谱 有些人又开始动歪脑筋了, 说我搞一个JSON序列化, 或者BSON序列化可不可以 2. JSON/BSON序列化 本质问题还是一样的, Object => byte[] => Object, 中间产生的垃圾对象太多, 尤其是Stream那些 所以, 我们需要思考DeepClone的本质是啥! 如果现在有一个类A, 你自己手写一个Clone函数, 那么是不是可以做到效率最高? 答案是显然的, 我知道有什么成员, new一个对象分别赋值就行了. 但是如果这个类A成天改, 维护的成本就比较高昂, 万一哪天忘了改, 就会出现一些奇妙的BUG. 所以, 类A的Clone函数, 是一个重复性的工作. 所有重复性的工作, 都可以通过代码生成来搞. 那么会有很多代码生成的答案: 3. 写一个DSL编译器 不要嘲笑这种方式, protobuf在C++的实现里面, 就有一个原型工厂, 做的是类似的事情. C++里面没有反射只能通过这种方式, 只要把这些脏活累活交给编译器就可以了. 唯一不同的是, 这是编译前代码生成. 4.