我有一個大家族的所有後代單親。這些對象都知道如何判斷它們是否已被修改,但是我還需要能夠查看一個對象的新實例是否已經被修改,與我已經在內存中創建的對象相比(測試是否有其他人更新了數據庫。當對象正在編輯)抽象函數和數據類型 - 是否有任何優雅的方式來做到這一點?
結果是每個子類必須包含同樣的方法:
public new bool Changed()
{
return Changed(this);
}
這真使我無法忍受,但我看到沒有辦法解決它的實際工作需要通過一個函數來完成,該函數的參數類型與它在—中的類相同,因此它不能是虛擬的。 (當然,我可以將它定義爲每次都接受父對象並進行投射,但這會使得比較函數接受樹中的任何對象,而不僅僅是正確的對象,並且它需要每個實例中的守衛代碼,而且還有些不好。)
當然這可以工作,但我不喜歡醜陋的代碼。
更新:至於Changed
函數,每個對象在加載時都保留其狀態的副本。
也許你可以詳細說明你的'Changed()',分享一些具體的例子。我可以根據那個 – skarmats
調整我的例子'Changed(SomeDerivedType o)'是在每個派生類中實現的嗎?用你的基類和一個派生類的例子的幾行真的可以幫助:-)我現在就叫它一個晚上 – skarmats
@skarmats:你說得對,每個派生類實現了Changed(<它自己的類型> o )。每個檢查它自己的字段並調用基地來檢查任何父字段。 –