8

本书CLR Via C#介绍了一种通过二进制序列化克隆对象的简单方法。

它指定StreamingContextStates.Clone何时创建BinaryFormatter类似的:

var formatter = new BinaryFormatter
{
    Context = new StreamingContext(StreamingContextStates.Clone)
};

的文档StreamingContextStates.Clone说它

指定正在克隆对象图。用户可以假设克隆的图将继续存在于同一进程中,并且可以安全地访问句柄或其他对非托管资源的引用。

很公平 - 但我真的不知道这实际上意味着什么。这实际上以何种方式改变了 的行为BinaryFormatter?任何人都可以列出使用此标志的任何具体效果吗?

4

1 回答 1

2

序列化是这里的主题。
MS 提供了一个“抽象的”微型框架来允许对象的序列化。
二进制格式化程序是该迷你框架概念的特定实现。

开发人员可以选择使用该框架概念来创建他自己的自定义格式化程序 - 或 -
在创建进一步实现序列化的迷你框架时,MS 本身。

所以他们提供了这些标志作为框架的一部分。

要回答您的具体问题:这些标志不会对二进制格式化程序产生任何影响,因为它已经实现为一种工具(如果您愿意)来跟踪对象图并将其简单地转换为原始数据的字节。
如果您创建自己的序列化程序,例如可以将对象保存到数据库或文件或共享内存或其他任何东西 - 您希望使用您的序列化程序的用户指定相应的标志。

除非我自 2003 年以来完全误解了 MS 开发人员 .. :) (这是可能的!)

于 2013-07-04T16:09:47.453 回答