我有一个大家族的所有后代单亲。这些对象都知道如何判断它们是否已被修改,但是我还需要能够查看一个对象的新实例是否已经被修改,与我已经在内存中创建的对象相比(测试是否有其他人更新了数据库。当对象正在编辑)抽象函数和数据类型 - 是否有任何优雅的方式来做到这一点?
结果是每个子类必须包含同样的方法:
public new bool Changed()
{
return Changed(this);
}
这真使我无法忍受,但我看到没有办法解决它的实际工作需要通过一个函数来完成,该函数的参数类型与它在—中的类相同,因此它不能是虚拟的。 (当然,我可以将它定义为每次都接受父对象并进行投射,但这会使得比较函数接受树中的任何对象,而不仅仅是正确的对象,并且它需要每个实例中的守卫代码,而且还有些不好。)
当然这可以工作,但我不喜欢丑陋的代码。
更新:至于Changed
函数,每个对象在加载时都保留其状态的副本。
也许你可以详细说明你的'Changed()',分享一些具体的例子。我可以根据那个 – skarmats
调整我的例子'Changed(SomeDerivedType o)'是在每个派生类中实现的吗?用你的基类和一个派生类的例子的几行真的可以帮助:-)我现在就叫它一个晚上 – skarmats
@skarmats:你说得对,每个派生类实现了Changed(<它自己的类型> o )。每个检查它自己的字段并调用基地来检查任何父字段。 –