我有一个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; }
}
答案 0 :(得分:4)
一种选择是:
tickerChanged
event
tickerChanged()
以外的支持字段lastUpdate
向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;
}
}