Lambdas,封闭变量,显示类,可序列化和普遍性层
我已经为Compact Framework实现了普遍性层(包括类似BinaryFormatter
的序列化器)。 我希望能够在适当的情况下序列化由lambda和迭代器之类的东西产生的编译器生成的类,以便if(例如)一个lambda及其关闭的变量(即显示类实例)被添加到可序列化对象上的事件中,并且所有已关闭的变量都是可序列化的,然后生成的对象图仍然是完全可序列化的。
如果这些类的实例只能通过它们被序列化的二进制文件的完全相同的构建来反序列化是可接受的 – 流行度层主要是为了在应用程序意外终止时提供持久性(电源故障和设备重启是不同的可能性) ,并且序列化的数据流不应该是向前或向后兼容的,或者甚至是相同的源代码的两个编译兼容 – 当我们下次与它进行对话时,所有后果将被发送到服务器,我们不会在断开连接时更新。
在这个有限的上下文中,格式化程序将这些编译器生成的类视为可序列化是否合理? 我看到的唯一选择是手工实现其他所有可编译器支持的模式,其中可串行化是一个问题,其后果从过于冗长到几乎不可读。
我看到你得到了什么,但根据我的经验,专注于序列化数据 ,并通过回滚/转发到已知状态来处理持久性是一个更好的主意,可能使用类似本地CQRS队列或其他类似的东西存储“你如何到达那里”的方式。
回答具体问题, 在问题的严格范围内 (仅针对相同的构建等)我认为应该没问题,但这很大程度上取决于在这些变量中捕获的任何内容是否没有合理的序列化 – 即类似一个无法重建的UI元素(很容易意外地被一个看不见的东西捕获)(操作系统句柄等)。 如果它是孤立数据(我的意思是:图表只是你自己代码中的数据 – 没有非托管依赖项),那么我想它应该没问题 。
另一个问题是CF缺少完整框架中可用的强大reflection,这可能使它比常规框架(例如GetUninitializedObject
)更加尴尬。 可能是可行的,但更多的工作。