如何在c#中自动更新属性

时间:2014-05-29 19:58:20

标签: c#

我有一个Json对象。我想在任何其他属性lastUpdate(已更改)时更新其set属性。

如何在不调用调用函数的lastUpdate属性的情况下解决此问题?

public class TickerData
{
    public string symbol { get; set; }
    public string exchange { get; set; }
    public SecurityType securityType { get; set; }
    public string  Currency { get; set; } // convert to enum later

    public strategy  entryStrategy { get; set; }
    public OHLCV ohlcv { get; set; }
    public HistoricalDataEventArgs[] historicalData { get; set; }
    public DateTime date { get; set; }
    public decimal open { get; set; }
    public decimal high { get; set; }
    public decimal low { get; set; }

    public decimal close { get; set; }
    public DateTime lastUpdate { get; set; }
}

4 个答案:

答案 0 :(得分:4)

一种选择是:

  1. 向您的班级
  2. 添加tickerChanged event
  3. 为您的属性提供从/向您读/写的字段
  4. 每次设置tickerChanged()以外的支持字段
  5. 时调用lastUpdate
  6. tickerChanged添加单个事件处理程序,以更新lastUpdate属性

    public class TickerData
    {
        private event Action tickerChanged;
    
        private string _symbol;
        public string symbol
        {
            get
            {
                return _symbol;
            }
            set
            {
                _symbol = value;
                tickerChanged();
            }
        }
    
        private string _exchange;
        public string exchange
        {
            get
            {
                return _exchange;
            }
            set
            {
                _exchange= value;
                tickerChanged();
            }
        }
    
        // ... continue the pattern ...
    
        public DateTime lastUpdate { get; private set; }
    
        public TickerData()
        {
            // register an event handler that
            // updates the lastUpdate property
            tickerChanged += () => lastUpdate = DateTime.Now;
        }
    }
    

答案 1 :(得分:1)

您可以从TickerData的每个其他设置器

调用lastUpdate的Setter

答案 2 :(得分:1)

听起来您可以通过更改跟踪更轻松地完成此操作。我不确定你试图保留你的对象有多纯粹,但你可以实现INotifyPropertyChanged甚至可以使用.NET 4.5中的新Caller信息属性 - 主要是监视属性的更改并适当地更新lastUpdate。阅读更多here

答案 3 :(得分:0)

我知道解决这个问题的方法,但这真的太丑了......

您必须用支持字段的常规属性替换所有自动属性,并在set块中设置lastUpdate。只需确保保持原样lastUpdate

private string symbol;
public string Symbol
{
    get { return symbol; }
    set
    {
         if(symbol == value) return; //this is optional

         symbol = value;
         lastUpdate = DateTime.Now;
    }
}