我有2个相同类型的对象,我想浅一个状态到另一个.在C我有memcpy这是伟大的.我怎么能在C#中做到这一点? MemberwiseClone()不够好,因为它创建&返回一个新对象,我想复制到现有对象.我想过使用反射,但我担心它对于生产代码来说太慢了.我还想过使用其中一个.Net序列化程序,但我认为它们也创建对象而不是设置现有的对象.
我的用例:
我有一个模板对象(类不是struct),需要通过其中一个实例(由此模板构成的对象)进行更新
有任何想法吗?
解决方法
[编辑]关于你的澄清:
据我所知,你有N个对象,每个对象都有一个(直接)引用模板对象.您想要回写模板,以便所有对象“看到”这些更改.
据我所知,你有N个对象,每个对象都有一个(直接)引用模板对象.您想要回写模板,以便所有对象“看到”这些更改.
建议:imlement一个模板经纪人.
class TemplateProvider { public MyData Template { get; set; } }
而不是传递模板,将模板提供程序传递给对象.
MyData Template { get { return m_templateProvider.Template; } } void UpdateTemplate() { m_templateProvider.Template = (MyData) this.MemberwiseClone(); }
模板提供程序还简化了多线程方案中的锁定.
简而言之,除非你自己做,否则没办法.但是,如果你覆盖所有属性,为什么不创建一个新对象呢?
memcopy和类似的低级构造不受支持,因为它们破坏了环境所做的保证.
结构的浅表副本是通过赋值完成的.对于类,MemberwiseClone是执行此操作的方法 – 但正如您所说,它创建了一个新对象.
没有内置的方法,因为它可能会破坏封装,无论如何都应该谨慎使用.
您可以使用反射构建通用例程,但它是否有效取决于类本身.是的,相比之下,ti会很慢.
剩下的就是通过自定义界面支持它.您可以提供一个通用的“浅复制”例程来检查接口并使用它,如果没有,则会回退到反射.这使得功能通常可用,并且您可以优化稍后性能重要的类.