跟踪已更改(未保存)的对象

时间:2010-04-05 23:23:35

标签: c# properties

当用户决定打开或保存时,我有一个与XML文件序列化的类。我正在尝试添加典型功能,当他们尝试使用未保存的更改关闭表单时,表单会警告他们并在关闭之前为他们提供保存选项。

我已经为我的班级添加了HasUnsavedChanges属性,我的表单会在关闭前检查。但是,我的属性已经从这样的事情发生了变化,这有点令人讨厌..

public string Name
{
    get;
   set;
}

到此......

private string _Name;
public string Name
{
    get
    {
         return _Name;
    }
   set
   {
        this._Name = value;
        this.HasUnsavedChanges = true;
   }
}

是否有更好的方法来跟踪类实例的更改?例如,是否有一些标准方法可以将类的实例“哈希”为一个值,我可以使用该值将最新版本与保存的版本进行比较而不会破坏类中的每个属性?

1 个答案:

答案 0 :(得分:6)

您可以将属性部分减少为单行:

private int _foo;

public int Foo
{
    get { return _foo; }
    set { SetProperty(ref _foo, value); }
}

将此添加到您的基类:

private bool _modified;

protected void SetProperty<TValue>(
    ref TValue member,
    TValue newValue,
    IEqualityComparer<TValue> equalityComparer)
{
    var changed = !equalityComparer.Equals(member, newValue);

    if(changed)
    {
        member = newValue;

        _modified = true;
    }
}

protected void SetProperty<TValue>(ref TValue member, TValue newValue)
{
    SetProperty(ref member, newValue, EqualityComparer<TValue>.Default);
}