我會用兩個不同的接口來表示信用卡對象。一個人可能會有制定者和另一個獲得者。 Order類中的CreditCard屬性只能是getter接口。
class CreditCardBase : ICreditCard
{
string Name { get; }
}
interface IWritableCreditCard : ICreditCard
{
string Name { get; set; }
}
class WritableCreditCard : CreditCardBase, IWritableCreditCard {}
class Order
{
private ICreditCard _card = new WritableCreditCard(); //initially...
public ICreditCard Card { get {return _card; } }
void OnComplete(...) { _card = new CreditCardBase(copy from _card); }
}
在運行時投「一卡通」的屬性的setter界面修改該卡的性能。如果訂單狀態現在處於只讀狀態,那麼實現CreditCard的對象將被換出只有實現getter的實現。
我看不出你如何能在編譯時區分,但至少正常行動將是安全的「吸氣劑只是」呼籲和修改代碼將是一個)醜且易於檢測和b)將如果在錯誤的時間執行,則返回null或拋出。
您如何設想編譯時解決這個工作? – jason 2010-01-15 02:13:31
他會寫他自己的VS擴展。 – ChaosPandion 2010-01-15 02:48:48
是的,創建2靜態類是如何實現編譯時檢查。不過,我仍然有一個類,並拋出運行時'OperationNotAllowed'類錯誤;你會複製一個類型的代碼/同步/維護2個類。 – Gishu 2010-01-15 02:53:52