C#memcpy等价

前端之家收集整理的这篇文章主要介绍了C#memcpy等价前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有2个相同类型的对象,我想浅一个状态到另一个.在C我有memcpy这是伟大的.我怎么能在C#中做到这一点? MemberwiseClone()不够好,因为它创建&返回一个新对象,我想复制到现有对象.我想过使用反射,但我担心它对于生产代码来说太慢了.我还想过使用其中一个.Net序列化程序,但我认为它们也创建对象而不是设置现有的对象.

我的用例:

我有一个模板对象(类不是struct),需要通过其中一个实例(由此模板构成的对象)进行更新

有任何想法吗?

解决方法

[编辑]关于你的澄清:
据我所知,你有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会很慢.

剩下的就是通过自定义界面支持它.您可以提供一个通用的“浅复制”例程来检查接口并使用它,如果没有,则会回退到反射.这使得功能通常可用,并且您可以优化稍后性能重要的类.

猜你在找的C&C++相关文章