2011-06-01 83 views
4

我不确定这段代码如何工作。序列化如何在没有构造函数的情况下工作?

[Serializable] 
    class Blah 
    { 
     public Blah(int value) 
     { 
      this.value = value; 
     } 

     public int value; 
    } 

     BinaryFormatter b = new BinaryFormatter(); 
     Blah blah = new Blah(4); 
     MemoryStream s = new MemoryStream(); 
     b.Serialize(s, blah); 
     s.Seek(0, SeekOrigin.Begin); 
     blah = null; 
     blah = (Blah)b.Deserialize(s); 

因为我没有无参数的构造函数,所以看起来很奇怪,反序列化器可以创建一个Blah的新实例。

回答

4

串行器在反序列化对象时不调用构造函数。字段的值是直接设置的。它不需要创建对象(通过new)它只创建存储,填充它并将其转换为Blah类型。

相关问题