2013-12-17 120 views
0

在參考this question's answer爲什麼序列化可以訪問私有構造函數?

注意構造不必是公共的。如果大多數序列化器都使用未初始化的對象構造(至少在.Net完整配置文件中可從Reflection獲得),那麼大多數序列化器都可以很好地處理私有無參數構造器,或者根本沒有。

如果我有這個泛型類:

public class FooClass 
{ 
    int X { get; set; } 
    int Y { get; set; } 

    private FooClass() { } 
} 

它是如何串行訪問私有構造函數?我一直認爲他們是某種外部圖書館,我很好奇他們爲什麼/如何調用私人構造函數,而我不可能在課堂外進行如此手動操作。

我明白爲什麼你需要一個私人建築,但我很好奇它是如何工作的。

回答

2

爲什麼

因爲你可能想以不同的方式編組時/解組對象(跨一個AppDomain,通過網絡等)來初始化實例。換句話說,創建空白狀態實例和從預先存在的狀態創建克隆可能有不同的業務邏輯。

如何

您可以使用Activator.CreateInstance反射來初始化使用私有/保護/等構造方法的對象。其overloads之一採用布爾值指定構造函數是否是非公有的。

相關問題