如何解决如何将实例数据复制到现有的类引用中/之上? C#
上下文:我正在尝试编写资源/内容管理器。加载内容时,将分配一个描述资源并保存非托管数据的类,并将其传递回调用方。我希望该管理器具有的功能是能够在程序运行时重新加载资产。然而,在这一点上,对该资源的引用可能已在程序的各个部分之间共享,并且据我所知,创建一个新资源并分配一个旧引用将简单地将该特定变量的引用更改为新资源,并且其余的保持不变。
因此,我的问题是:如何创建该类的新实例,然后复制到先前资源所在的内存块中?或者,我认为这是真正的问题:无法做到这一点如何解决? (由于指针的任意性,我认为拥有不同的数据(尤其是具有不同的大小)无论如何都行不通,但我不知道,也无法在其他地方找到答案。)
推测(随意跳过):关于第二个问题的解决方案,我的第一个猜测是使用标识符将引用传递给内容管理器本身,但这似乎很麻烦,因为必须在该地方传递多个引用一。另一个解决方案是让事件系统在重新加载时触发,但是让使用这些资源的每个类都必须管理此事件似乎也不是一个好主意。
如果可能的回答者需要更多背景信息,请发表评论,谢谢。
解决方法
如果可以获得指向非托管内存的指针,则完全有可能用其他东西覆盖它,有关如何使用的信息,请参见copy intptr。如果已将内存复制到其他地方,或者新数据的大小与旧数据不同,则此操作将无效。
您可以对值类型的托管数组执行类似的操作,但我认为您无法获得指向引用类型对象的指针。因此,您无法就地替换参考对象。但是,可以根据需要使用反射来更改对象中的字段,但是通常不建议这样做。
解决此类问题的一种方法是间接处理。而不是共享对象,而是共享一个包装器,该包装器允许替换对象。也可以向该包装中添加一个事件,该事件在替换对象时引发。使用此系统,各种组件可能需要监视资源以进行更改并适当地进行处理。
如果这是用于游戏,我会考虑重新启动整个图形系统并重新加载所有资源,这可能比确保所有组件都能正确处理重新加载要容易。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。