-1
在構造函數完成之前,是否有任何情況可以通過構造函數之外的代碼訪問具有完全自包含構造函數*的類型?也就是說,是一個獨立的構造函數,保證在對象可以以任何方式使用之前運行?有沒有什麼奇怪的邊界情況下,部分構造的對象可以在C#中訪問?
*一個構造函數不會將this
參數傳遞給任何方法,包括通過調用其自身的任何方法隱式傳遞參數。
在構造函數完成之前,是否有任何情況可以通過構造函數之外的代碼訪問具有完全自包含構造函數*的類型?也就是說,是一個獨立的構造函數,保證在對象可以以任何方式使用之前運行?有沒有什麼奇怪的邊界情況下,部分構造的對象可以在C#中訪問?
*一個構造函數不會將this
參數傳遞給任何方法,包括通過調用其自身的任何方法隱式傳遞參數。
在對象可以以任何方式使用之前運行保證自包含構造?
不,不能保證。請參閱此鏈接
所以你的對象可以在不調用構造函數來啓動。
由於對象的新實例初始化爲零並且沒有運行構造函數,因此該對象可能不會表示被該對象視爲有效的狀態。
您可以通過重現:
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 ...