【发布时间】:2017-03-26 07:19:26
【问题描述】:
我目前正在尝试实现属性,特别是限制我的设置器。例如,我有一个我想要的 'Money' 浮点字段,因此您可以向其添加/减去值,但是当它为 0 时,使其无法再减去,但仍可以添加到。
我在下面的代码中看到,一旦“Money”达到 0,它就会一直停留在 0。有没有办法检查 setter 是否被添加到?我知道您可以在 AddMoney 或 SubtractMoney 方法中检查它,但更好奇是否可以在 setter 中这样做。
public float Money {
get {
return this._money;
}
set {
if (_money <= 0){
_money = 0;
} else {
_money = value;
}
}
}
void AddMoney(float addAmount){
Money += addAmount;
}
void SubtractMoney(float subtractAmount){
Money -= subtractAmount;
}
【问题讨论】:
-
您可以检查
value是否为负... -
旁注:我强烈怀疑您的作业希望您将验证放到其他地方而不是 setter...
-
永远永远永远永远永远永远不会将钱存入花车。使用小数
-
@AlexeiLevenkov 哦,把它放在 setter 中是不好的做法吗?
-
不,范围检查在 setter 中是合理的......它会导致类似数字的值出现奇怪且不直观的行为(例如,
v = v - 5 + 3通常预计等同于v = v -5; v = v + 3;但它此类属性并非如此)。但同样,如果这是某种家庭作业,则作业可能需要一些不同的东西,因为Susbstract(decimal amount)通常应该自行检查值以保证预期的逻辑并引发合理的错误。
标签: c# math properties setter limiting