有没有办法让 属性 设置其支持值?
Is there a way for a property to set its backing value?
我有一个 属性,我希望它在设置时设置另一个 属性。例如:
private double Bpm
{
set
{
<myself> = value;
_bps = <myself> / 60;
}
get
{
return <myself>;
}
}
我实际做的是下面的,因为我找不到别的方法:
private double _bpm;
private double _bps;
private double Bpm
{
set
{
_bpm = value;
_bps = _bpm / 60;
}
get
{
return _bpm;
}
}
我觉得不优雅,有两个私有成员 Bpm
和 _bpm
。我也可以有一个 SetBpm
方法,但我想知道这是否可以通过属性实现。
A 属性 只是 一对方法,真的 - 如果您使用自动实现的 属性,编译器会为您实现它们并创建一个字段。你想要一个字段——因为你只有一个实际值,以及它的两个视图——所以你可以让编译器通过使用自动实现的 属性 自动为你创建该字段,或者你可以自己声明。我个人会使用自动实现的 属性。然后你在原来的基础上计算出other属性。您可以将其设置为只读 属性,也可以将其设置为可读写。
例如,作为只读版本:
public double BeatsPerSecond { get; set; }
public double BeatsPerMinute { get { return BeatsPerSecond * 60; } }
或者在 C# 6 中:
public double BeatsPerSecond { get; set; }
public double BeatsPerMinute => BeatsPerSecond * 60;
对于读写版本:
public double BeatsPerSecond { get; set; }
public double BeatsPerMinute
{
get { return BeatsPerSecond * 60; }
set { BeatsPerSecond = value / 60; }
}
如果您愿意,您可以决定将 BeatsPerMinute
改为 "stored",只需更改 属性 计算即可。
我的首选方法是公开两个 public 属性,它们可以更新彼此的支持字段。如果您的属性的读取频率高于更新频率,这将避免在每次读取时重复执行乘法或除法运算。
private double _bpm;
private double _bps;
private double Bpm
{
get
{
return _bpm;
}
set
{
_bpm = value;
_bps = value / 60;
}
}
private double Bps
{
get
{
return _bps;
}
set
{
_bps = value;
_bpm = value * 60;
}
}
实际使用属性是在 public
模式下,因此您可以将 属性 更改为如下值:
private double Bpm;
private double Bps
{
get
{
return Bpm / 60;
}
}
感谢@Farhad Jabiyev。
我有一个 属性,我希望它在设置时设置另一个 属性。例如:
private double Bpm
{
set
{
<myself> = value;
_bps = <myself> / 60;
}
get
{
return <myself>;
}
}
我实际做的是下面的,因为我找不到别的方法:
private double _bpm;
private double _bps;
private double Bpm
{
set
{
_bpm = value;
_bps = _bpm / 60;
}
get
{
return _bpm;
}
}
我觉得不优雅,有两个私有成员 Bpm
和 _bpm
。我也可以有一个 SetBpm
方法,但我想知道这是否可以通过属性实现。
A 属性 只是 一对方法,真的 - 如果您使用自动实现的 属性,编译器会为您实现它们并创建一个字段。你想要一个字段——因为你只有一个实际值,以及它的两个视图——所以你可以让编译器通过使用自动实现的 属性 自动为你创建该字段,或者你可以自己声明。我个人会使用自动实现的 属性。然后你在原来的基础上计算出other属性。您可以将其设置为只读 属性,也可以将其设置为可读写。
例如,作为只读版本:
public double BeatsPerSecond { get; set; }
public double BeatsPerMinute { get { return BeatsPerSecond * 60; } }
或者在 C# 6 中:
public double BeatsPerSecond { get; set; }
public double BeatsPerMinute => BeatsPerSecond * 60;
对于读写版本:
public double BeatsPerSecond { get; set; }
public double BeatsPerMinute
{
get { return BeatsPerSecond * 60; }
set { BeatsPerSecond = value / 60; }
}
如果您愿意,您可以决定将 BeatsPerMinute
改为 "stored",只需更改 属性 计算即可。
我的首选方法是公开两个 public 属性,它们可以更新彼此的支持字段。如果您的属性的读取频率高于更新频率,这将避免在每次读取时重复执行乘法或除法运算。
private double _bpm;
private double _bps;
private double Bpm
{
get
{
return _bpm;
}
set
{
_bpm = value;
_bps = value / 60;
}
}
private double Bps
{
get
{
return _bps;
}
set
{
_bps = value;
_bpm = value * 60;
}
}
实际使用属性是在 public
模式下,因此您可以将 属性 更改为如下值:
private double Bpm;
private double Bps
{
get
{
return Bpm / 60;
}
}
感谢@Farhad Jabiyev。