2009-07-15 24 views
3

可能重複:
Why XML-Serializable class need a parameterless constructor防止調用除了XML公共構造串行

有誰知道,如果它可以防止公共構造函數的調用從一系列組件之外?

我在做什麼就要到了與具有XML序列化的類類庫。如果沒有設置各種屬性而構建這些類是沒有意義的,所以我想阻止該狀態。

我不知道是否有一種方法,以防止任何人叫我的公共構造函數,它保留下來僅序列化?

+0

刪除無障礙標籤,不適用於這個問題。 – 2009-07-15 11:27:58

+1

當你想阻止它被調用時,你爲什麼要公開一個構造函數? – 2009-07-15 11:29:29

回答

1

通常情況下,我會創建一個參數的公共構造方法,這將使該對象的有效和創建有效的默認值的公共參數構造函數。

public foo() { 
    this.bar = -1; 
} 

public foo(int bar) { 
    this.bar = bar; 
} 

私人/內部構造可以根據自己的情況來使用,你可以創建一個對象的創建外部代碼涉及工廠模式。

0

爲了達到你的要求,你應該做的構造私有,然後用getInstance方法是否正確裝配的getInstance調用返回的對象。如果您將調用函數的對象或程序集作爲其參數之一傳遞,則可以在getInstance方法內執行檢查。

0

我不知道它會在你的情況下工作,但你可以檢查調用程序集:

if (Assembly.GetCallingAssembly().GetName().Name == "Forbidden.Assembly") 
{ 
    throw new Exception(...); 
}