StreamingContextStates.克隆确实如此
本文关键字:StreamingContextStates | 更新日期: 2023-09-27 18:18:42
书CLR Via C#
介绍了一种通过二进制序列化克隆对象的简单方法。
创建BinaryFormatter
时指定StreamingContextStates.Clone
,如下:
var formatter = new BinaryFormatter
{
Context = new StreamingContext(StreamingContextStates.Clone)
};
StreamingContextStates.Clone
的文档说它
克隆对象图。用户可以假设克隆的图将继续存在于同一进程中,并且可以安全地访问句柄或其他对非托管资源的引用。
很好,但我真的不知道这到底是什么意思。这在什么方面改变了BinaryFormatter
的行为?谁能列举出使用这个标志的具体效果?
序列化是这里的主题。
MS提供了一个"抽象"的迷你框架来允许对象的序列化。二进制格式化程序是该迷你框架概念的具体实现。
开发人员可以选择使用该框架概念来创建自己的自定义格式化器-或-
MS本身在创建小框架时考虑了进一步实现序列化。
所以他们提供了这些标志作为框架的一部分。
回答你的具体问题:这些标志对二进制格式化器没有任何影响,因为它已经被实现为一个工具(如果你喜欢的话)来跟踪对象图,并简单地将其转换为原始数据字节。
如果你创建了自己的序列化器,例如可以将对象保存到数据库、文件或共享内存或其他地方,你会希望使用你的序列化器的用户指定相应的标志。
除非我完全误解了2003年以来的微软开发者…:)(这是可能的!)