修改了On Timestamp,更新了对类属性的任何更改

时间:2011-01-24 00:24:16

标签: c# object properties

我对如何说出这个问题有些不确定,所以请原谅我这是否重复。

基本上我想在每次更改属性时调用UpdateModifiedTimestamp。这只是我写得很快的一个示例课程,但应该解释我想要实现的目标。

每次更改名字,姓氏或电话时,都应更新ModifiedOn属性。

public class Student {
   public DateTime ModifiedOn { get; private set; }
   public readonly DateTime CreatedOn;
   public string Firstname { set; get; }
   public string Lastname { set; get; }
   public string Phone { set; get; }

   public Student() {
      this.CreatedOn = DateTime.Now();
   }

   private void UpdateModifiedTimestamp() {
      this.ModifiedOn = DateTime.Now();
   }
}

2 个答案:

答案 0 :(得分:2)

您所描述的内容听起来非常接近通常通过INotifyPropertyChanged界面完成的属性更改通知。实现此接口可以为您的问题提供更通用的解决方案:

public class Student :INotifyPropertyChanged
{
   public string Firstname { set; get; }
   public event PropertyChangedEventHandler PropertyChanged;

   private void NotifyPropertyChanged(String info)
   {
      UpdateModifiedTimestamp(); // update the timestamp
      if (PropertyChanged != null)
      {
          PropertyChanged(this, new PropertyChangedEventArgs(info));
      }
   }

   string _firstname;
   public string Firstname  //same for other properties
   {
     get
     {
         return _firstname;
     }

     set
     {
        if (value != _firstname)
        {
            _firstname = value;
            NotifyPropertyChanged("Firstname");
        }
     }
   }
 }

这种方法也会让您的班级消费者可以获得更改通知,如果这是您正在拍摄的内容,则可能更喜欢不同的解决方案。

答案 1 :(得分:1)

不确定这是否是最好的方法,但您可以这样做的一种方法是,在属性的三个setter中调用UpdateModifiedTimeStamp()方法。

例如:

public string _firstName;
public string Firstname 
{ 
  get { return this._firstName; }
  set
  {
    this._firstName = value;
    this.UpdateModifiedTimestamp();
  }
}

同样,对LastnamePhone属性执行相同的操作。