StreamingContextStates.Clone实际上做了什么?

时间:2013-06-17 20:24:31

标签: c# serialization binaryformatter

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

在创建StreamingContextStates.Clone时指定BinaryFormatter,如此:

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

The documentation for StreamingContextStates.Clone说它

  

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

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

1 个答案:

答案 0 :(得分:2)

序列化是这里的主题。
MS提供了一个“抽象”的迷你框架,允许对象的序列化 二进制格式化程序是该迷你框架概念的具体实现
开发人员可以选择使用该框架概念来创建自己的自定义格式化程序 - 或 -
MS本身在创建迷你框架时考虑进一步实现序列化。

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

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

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