可能重複:
Why XML-Serializable class need a parameterless constructor防止調用除了XML公共構造串行
有誰知道,如果它可以防止公共構造函數的調用從一系列組件之外?
我在做什麼就要到了與具有XML序列化的類類庫。如果沒有設置各種屬性而構建這些類是沒有意義的,所以我想阻止該狀態。
我不知道是否有一種方法,以防止任何人叫我的公共構造函數,它保留下來僅序列化?
可能重複:
Why XML-Serializable class need a parameterless constructor防止調用除了XML公共構造串行
有誰知道,如果它可以防止公共構造函數的調用從一系列組件之外?
我在做什麼就要到了與具有XML序列化的類類庫。如果沒有設置各種屬性而構建這些類是沒有意義的,所以我想阻止該狀態。
我不知道是否有一種方法,以防止任何人叫我的公共構造函數,它保留下來僅序列化?
通常情況下,我會創建一個參數的公共構造方法,這將使該對象的有效和創建有效的默認值的公共參數構造函數。
public foo() {
this.bar = -1;
}
public foo(int bar) {
this.bar = bar;
}
私人/內部構造可以根據自己的情況來使用,你可以創建一個對象的創建外部代碼涉及工廠模式。
爲了達到你的要求,你應該做的構造私有,然後用getInstance方法是否正確裝配的getInstance調用返回的對象。如果您將調用函數的對象或程序集作爲其參數之一傳遞,則可以在getInstance方法內執行檢查。
我不知道它會在你的情況下工作,但你可以檢查調用程序集:
if (Assembly.GetCallingAssembly().GetName().Name == "Forbidden.Assembly")
{
throw new Exception(...);
}
刪除無障礙標籤,不適用於這個問題。 – 2009-07-15 11:27:58
當你想阻止它被調用時,你爲什麼要公開一個構造函數? – 2009-07-15 11:29:29