2015-09-05 33 views

回答

5

在對象可以以任何方式使用之前運行保證自包含構造?

不,不能保證。請參閱此鏈接

https://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatterservices.getuninitializedobject.aspx

所以你的對象可以在不調用構造函數來啓動。

由於對象的新實例初始化爲零並且沒有運行構造函數,因此該對象可能不會表示被該對象視爲有效的狀態。

您可以通過重現:

var demo = (DemoClass)System.Runtime.Serialization 
         .FormatterServices.GetSafeUninitializedObject(typeof(DemoClass)); 
Console.WriteLine("PROP=" + demo.Prop); 

public class DemoClass 
{ 
    public int Prop = 5; 
    public DemoClass() 
    { 
     Prop = 6; 
    } 
} 

輸出將被0,而不是5或6 ...

相關問題