似乎是一个糟糕的设计选择,您通常不会期望设置一个属性的值也应该设置另一个属性的值。
我想你可以试试这个。
在Angle上创建构造函数:
public Angle(float deg, float rad)
{
this.Deg = deg;
this.Rad = rad;
}
在Angle 类上有一个自动属性,并在Deg 被设置时设置它:
public float Deg
{
get
{
return _deg;
}
set
{
_deg = value;
this.RotationAngle = new Angle(value, _rad);
}
}
public Angle RotationAngle
{
get;
set;
}
然后您可以从其他类访问RotationAngle。
或者,您可以查看INotifyPropertyChanged 接口,并在设置Deg 时触发一个事件,例如:
public class Angle : INotifyPropertyChanged
{
private float _deg;
private float _rad;
public event PropertyChangedEventHandler PropertyChanged;
public Angle() { }
public Angle(float deg, float rad)
{
this.Deg = deg;
this.Rad = rad;
}
public float Deg
{
get
{
return _deg;
}
set
{
_deg = value;
OnPropertyChanged("Deg");
}
}
public float Rad
{
get
{
return _rad;
}
set
{
_rad = value;
}
}
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, e);
}
}
protected void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
}
然后,在您的其他类中,您将在创建 Angle 实例时订阅该事件,并在触发事件时设置 RotationAngle:
Angle angle = new Angle();
angle.PropertyChanged += angle_PropertyChanged;
static void angle_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// You would set `RotationAngle` here
this.RotationAngle = foo;
}