首页 / C# / c#-设置程序和后备字段中的.NET逻辑
c#-设置程序和后备字段中的.NET逻辑
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-设置程序和后备字段中的.NET逻辑,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2368字,纯文字阅读大概需要4分钟。
内容图文
![c#-设置程序和后备字段中的.NET逻辑](/upload/InfoBanner/zyjiaocheng/682/497f98ebdbec4ccc8e4ff36b03c8600f.jpg)
我有两个属性,其中第一个属性(FXRate)更改时,必须更新后一个属性(CalulcatedValue).
我可以通过将CalulcatedValue设置为ReadOnly并从FXRate设置器中调用OnPropertyChanged(“ CalculatedValue”)来实现此目的.
public double FXRate {
get { return _fXRate; }
set {
Set(_fXRate, value, "FXRate");
OnPropertyChanged("CaluclatedValue");
}
}
public float CalculatedValue
{
get { return FXRate * SomeOtherValue;}
}
但是我知道CalulcatedValue属性会被调用很多(用于多个LINQ查询等).我当时考虑的是,吸气剂应该非常快地返回该值,并正计划为其提供支持.
public double FXRate
{
get { return _fXRate;}
set {
Set(_fXRate, value, "FXRate");
CalculatedValue = 0; //how to set CalculatedValue since it's setter is calculating it with its logic, i.e. the value parameter is not needed ?
}
}
private double _fXRate;
public float CalculatedValue
{
get { return _calculatedValue; }
set {
__calculatedValue = FXRate * SomeOtherValue); //consider this line takes some effort to be calculated -> instead of SomeOtherValue there might be pretty complex logic here to get the result
OnPropertyChanged("CalculatedValue");
}
}
private float _calculatedValue;
现在应如何设置CalulcatedValue?它不需要传递任何值参数,因为逻辑位于设置器内.线
CalulcatedValue=0
就是现在发生的愚蠢事情.
解决方法:
如果需要INotifyPropertyChanged通知,则将其添加到FXRate属性(和/或可能更改CalculatedValue值的任何属性)中,然后在其中进行计算:
private double _fXRate;
private float _calculatedValue;
public double FXRate
{
get { return _fXRate;}
set {
Set(_fXRate, value, "FXRate");
_calculatedValue = _fxRate * SomeOtherValue;
// this will update any control depending on the `CalculatedValue` notification
OnPropertyChanged("CalculatedValue");
}
}
public float CalculatedValue
{
get { _calculatedValue; }
}
或者,如果您希望将计算推迟到第一次读取(因为您将多次更新FxRate或实际读取CalculatedValue之前的某些操作),则可以执行以下操作:
private double _fXRate;
private float _calculatedValue;
private bool _calculatedValueIsDirty = true;
public double FXRate
{
get { return _fXRate;}
set {
Set(_fXRate, value, "FXRate");
_calculatedValueIsDirty = true;
OnPropertyChanged("CalculatedValue");
}
}
public float CalculatedValue
{
get {
if(_calculatedValueIsDirty) {
_calculatedValue = _fxRate * SomeOtherValue;
_calculatedValueIsDirty = false;
}
return _calculatedValue;
}
}
除非预先计算的值再次变脏(通过更改FXRate),否则随后对CalculatedValue的读取将很快返回.
PS:如果有类似多线程的内容,请在必要时应用锁:-)
内容总结
以上是互联网集市为您收集整理的c#-设置程序和后备字段中的.NET逻辑全部内容,希望文章能够帮你解决c#-设置程序和后备字段中的.NET逻辑所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。