可以說我有類型爲String的兩個屬性的類屬性如何定義依賴一個彼此
- PROP1
- PROP2
並有下列限制
- 如果Prop2值爲「Test2」,則Prop1不能等於「Test1」
- PROP2不能等於「Test22」如果PROP1值爲「TEST11」
- 設置爲prop1 =「Test111」如果PROP2 =「Test222」
什麼是定義其值的屬性的最佳方法是互相依賴的,而且在一個屬性中所做的更改應該觸發另一個屬性的setter屬性?
可以說我有類型爲String的兩個屬性的類屬性如何定義依賴一個彼此
並有下列限制
什麼是定義其值的屬性的最佳方法是互相依賴的,而且在一個屬性中所做的更改應該觸發另一個屬性的setter屬性?
你負責編碼的「邏輯」,你也許需要在屬性setter(一種驗證)
我會使用規範圖案提取驗證邏輯,並使其可測試以及
http://devlicio.us/blogs/jeff_perrin/archive/2006/12/13/the-specification-pattern.aspx
我實際上正在尋找一種機制,可以指定依賴於特定屬性值(比如s1)的屬性(比如說d1,d2,d3),並且只要s1的值更改了設置者的d1,d2 ,d3會自動調用。 –
您需要在屬性設置器中添加驗證。
string prop1;
string prop2;
string Prop1
{
get { return prop1;}
set
{
if (!(Prop2 == "Test2" && value == "Test1"))
{
Prop1 = value;
}
... Add other condition here
}
}
string Prop2
{
get { return prop1;}
set
{
// set Prop2 based on Prop1
}
}
我認爲你錯過了練習的要點:問題在於,如果不能單獨進行更改,只能同時更改兩個屬性,才能使對象處於狀態。 – dasblinkenlight
@dasblinkenlight,如果沒有。的國家和轉型很大,在我看來,國家設計模式是要走的路。如果國家/轉型較少,它可以與少數制定者一起工作。如果有一些動作僅在初始化期間有效,我使用標誌來區分新的/初始化的狀態。無論如何,如果/其他梯子不可讀且容易出錯。 – Tilak
你可以在每個屬性的setters中實現這個邏輯,但我會質疑這一點。
在對象上使用Validate
方法可能會更好,該方法將檢查這些屬性的狀態,或讓另一個對象負責執行驗證,並返回錯誤或根據需要更改對象。
你有很多的選擇,在這裏:
using
聲明中使用後衛。
我想這應該得到'家庭作業'標籤 - 如果它仍然在? @Paul>我想你會需要一些「ifs」,然後在試圖設置「Test1」或「Test22」時拋出異常(或什麼都不做)。 – Laoujin
@Laoujin作業標籤已被[棄用](http://meta.stackexchange.com/q/147100/189763)。 –