public abstract class ANetworkedComponent
{
public bool Dirty { get; set; } = false;
}
public class Collider: ANetworkedComponent
{
public Vector2 Velocity { get; set; }
}
每次修改繼承自的類的屬性時,我都需要設定Dirty為。例如,當trueANetworkedComponent
var collider = new Collider();
collider.Velocity = new Vector(10, 10);
被執行,那么 collider.Dirty 應該被設定為true.
手動修改屬性不是一種選擇,因為屬性太多而且不是DRY. 還有其他選擇嗎?
uj5u.com熱心網友回復:
它看起來只是違反 DRY,因為Dirty整個班級只有一個屬性。如果您IsPropertyDirty對每個屬性都有一個單獨的屬性,您就不會說這是違反 DRY 的。
最快的(按時間執行)將是您自己撰寫的屬性。但正如您所指出的,這是最耗時的開發人員,所以我只會在性能分析表明它的情況下這樣做。
另一個快速選擇是“面向方面的編程”。有一些 C# 庫,如 PostSharp,允許您向類添加“方面”。例如,您可以為您的類自動實作 PostSharpINotifyPropertyChangedDirty ,然后您可以使用它來偵聽屬性更改并設定. 我相信你也可以添加你自己的方面來改變各種條件下的臟狀態。
PostSharp 屬于一類 AOP 庫,可在編譯期間將代碼編織到您的程式集中。通常,您使用屬性來裝飾類、屬性和方法,這會告訴 PostSharp 在您的代碼中自動實作哪些行為。還有一些支持運行時方面的庫(許多 IOC 容器都支持這一點),雖然性能與代碼生成的 AOP 不匹配,但它們非常有用。
uj5u.com熱心網友回復:
您可以創建一個帶有虛擬欄位的通用屬性,該屬性使用反射來更改該內部屬性集上的 Dirty 標志
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/459981.html
上一篇:關于如何創建子類的簡單問題?
下一篇:在派生類中深度復制指標向量
