gpt4 book ai didi

c# - Lambda、封闭变量、显示类、可序列化和流行层

转载 作者:太空宇宙 更新时间:2023-11-03 11:41:17 24 4
gpt4 key购买 nike

我已经为 Compact Framework 实现了一个流行层(包括一个类似 BinaryFormatter 的序列化程序)。我希望能够在适当的时候序列化编译器生成的类,这些类是由 lambdas 和迭代器等产生的,所以如果(例如)一个 lambda 及其封闭变量(即显示类实例)被添加到可序列化对象的事件中,并且所有封闭变量都是可序列化的,那么生成的对象图仍然是完全可序列化的。

如果这些类的实例只能由它们从中序列化的二进制文件的完全相同的构建反序列化,这是可以接受的——流行层主要是为了在应用程序意外终止时提供持久性(电源故障和设备重启是截然不同的可能性),并且序列化数据流不应该向前或向后兼容,甚至不会在同一源代码的两次编译之间兼容——所有结果都将被发送无论如何,我们下次与服务器通话时,我们不会在断开连接时进行更新。

在这种有限的上下文中,我的格式化程序将这些编译器生成的类视为可序列化的类是否合理?我看到的唯一替代方法是在任何地方手动实现编译器支持的模式,因为可序列化性是一个问题,其后果从过于冗长到几乎不可读。

最佳答案

我明白你的意思了,但根据我的经验,专注于序列化数据并通过回滚/前进到已知状态来处理持久性是一个更好的主意,也许使用类似于本地 CQRS 队列,或其他存储“您如何到达那里”的方式。

关于具体问题,在问题的严格范围内(仅在同一构建等上工作)我应该没问题,但这取决于很多关于是否 在这些变量中捕获的任何内容 没有合理的序列化 - 即类似于 UI 元素的东西(很容易被不可见的 this 意外捕获)无法重建的(操作系统句柄等)。如果它是孤立的数据(我的意思是:图表只是来自您自己的代码中的数据 - 没有非托管依赖项),那么我想它应该没问题。

另一个问题是 CF 在完整框架中缺少很多可用的更强反射,这可能会使它比在常规框架(例如 GetUninitializedObject)上更尴尬。可能可行,但需要更多工作。

关于c# - Lambda、封闭变量、显示类、可序列化和流行层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4733018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com