Mhd*_*wan 21 c# properties automatic-properties c#-3.0
我想使用自动实现的属性,但同时我想在每次更改属性时调用方法.
public float inverseMass
{
get;
set
{
onMassChanged();
inverseMass = value;
}
}
Run Code Online (Sandbox Code Playgroud)
先前的代码是否对属性进行了递归调用?如果是的话,如何实现呢?
Gar*_*ary 26
如果您提供自己的get/set,那么您需要为变量提供自己的存储空间.
private float _inverseMass;
public float inverseMass
{
get { return _inverseMass; }
set
{
_inverseMass = value;
onMassChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
改为使用支持字段:
public float inverseMass
{
get
{
return _inverseMass;
}
set
{
onMassChanged();
_inverseMass = value;
}
}
private float _inverseMass;
Run Code Online (Sandbox Code Playgroud)
我曾经读到某个地方,C#家伙决定用这些自动属性覆盖广泛的使用场景,但对于特殊情况,你必须回到良好的旧支持领域.
(说实话,我相信Jon Skeet告诉他们如何实施它们)
您需要将以上内容分为私人/公共成员,这样您就不会遇到递归问题:
private float _inverseMass;
public float inverseMass
{
get { return this._inverseMass; }
set { this._inverseMass = value; onMassChanged(); }
}
Run Code Online (Sandbox Code Playgroud)
但是,您是否已查看INotifyPropertyChanged界面?它几乎可以满足您的需求,并且根据您所写的内容,它本身可以得到支持。
public class MyClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String property)
{
var event = this.PropertyChanged;
if (event != null)
{
event(this, new PropertyChangedEventArgs(property));
}
}
private float _inverseMass;
public float inverseMass
{
get { return this._inverseMass; }
set { this._inverseMass = value; NotifyPropertyChanged("inverseMass"); }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25756 次 |
| 最近记录: |