我有一個類,在設計時按字母順序對正在序列化的屬性進行中繼是有問題的。 換句話說,屬性Z必須在屬性A之前序列化。在設計時改變財產序列化的順序在.Net
問題出現是因爲屬性屬性Z每當它發生更改時就清除屬性A - 這發生在InitializeComponent中。 我通過設置FirstTime標誌來解決這個問題,但這似乎很麻煩。
我發現了一個解決方案here (translated from Spanish),但這似乎是過度殺人。
處理問題的正確方法是什麼?
我有一個類,在設計時按字母順序對正在序列化的屬性進行中繼是有問題的。 換句話說,屬性Z必須在屬性A之前序列化。在設計時改變財產序列化的順序在.Net
問題出現是因爲屬性屬性Z每當它發生更改時就清除屬性A - 這發生在InitializeComponent中。 我通過設置FirstTime標誌來解決這個問題,但這似乎很麻煩。
我發現了一個解決方案here (translated from Spanish),但這似乎是過度殺人。
處理問題的正確方法是什麼?
我是「矯枉過正」解決方案的作者。 :-)如果你不喜歡基於CodeDomSerializer
的解決方案,我認爲你唯一的選擇就是設計你的課程,以便可以按任何順序初始化屬性(無論如何這都被認爲是最佳實踐)。例如,如果屬性Z是第一次調用setter,那麼您是否可以讓屬性Z不清楚屬性A?類似於:
bool propertyZHasBeenSet=false;
SomeType propertyZ
{
get {
//Property getter
}
set {
if(propertyZHasBeenSet) {
//Clear property A
} else {
propertyZHasBeenSet=true;
}
//The remaining of the property setter
}
}
我確定必須有更好的方法來完成同樣的事情,但你明白了。
這裏的最佳做法是重新編寫您的課程,以便所有設計時間屬性相互獨立。這就是所有Microsoft提供的可設計類型的工作方式。
我之前幾乎陷入了這個陷阱,我總是通過讓有趣的相互依賴只發生在運行時而不是設計時間來解決它。
+1,事實上這就是所有*類型應該如何工作的。屬性應該永遠不會有這種奇怪的交互,並且應該總是可以按任意順序設置。 – 2009-10-21 08:39:09
嗨,感謝您的回覆。正如你所說,我目前的解決方案是基於在第一次調用setter時不清除屬性。我只是想確保我以標準方式做事。當需要一點「矯枉過正」時,我會爲您的解決方案書標記標記;-)。 – Jules 2009-10-21 08:41:33