本书CLR Via C#
提供了一种通过二进制序列化克隆对象的简单方法。
在创建StreamingContextStates.Clone
时指定BinaryFormatter
,如此:
var formatter = new BinaryFormatter
{
Context = new StreamingContext(StreamingContextStates.Clone)
};
The documentation for StreamingContextStates.Clone
说它
指定正在克隆对象图。用户可以假设克隆的图形将继续存在于同一进程中,并且可以安全地访问句柄或对非托管资源的其他引用。
很公平 - 但我真的不知道这究竟意味着什么。这实际上以什么方式改变了BinaryFormatter
的行为?任何人都可以列出使用此标志的具体效果吗?
答案 0 :(得分:2)
序列化是这里的主题。
MS提供了一个“抽象”的迷你框架,允许对象的序列化
二进制格式化程序是该迷你框架概念的具体实现
开发人员可以选择使用该框架概念来创建自己的自定义格式化程序 - 或 -
MS本身在创建迷你框架时考虑进一步实现序列化。
所以他们提供了这些标志作为框架的一部分。
回答您的具体问题:这些标志对二进制格式化程序没有任何影响,因为它已经作为工具实现(如果您愿意)跟踪对象图并简单地将其转换为原始数据的字节。
如果您创建自己的序列化程序,例如可以将对象保存到数据库或文件或共享内存或其他任何东西 - 您希望使用序列化程序的用户指定相应的标记。
除非我自2003年以来完全误解了MS开发者...... :)(这是可能的!)