2011-06-01 55 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類型。

相關問題