属性 的值应该用方法更新还是在 getter 中确定?
Should the value of a property be updated with a method or determined in the getter?
只是一个简短的问题,以便了解在更新 属性 的值与每次需要更改值时调用的方法之间是否有更好的做法,或者只是在getter.
比如这之间:
public double Balance { get; private set; }
private void UpdateBalance()
{
if (Payments.IsNullOrEmpty())
{
Balance = 0;
}
else
{
double amountSum = 0;
foreach (Payment payment in Payments)
{
amountSum += payment.Amount;
}
Balance = amountSum;
}
}
还有这个:
public double OtherBalance
{
get
{
if (Payments.IsNullOrEmpty())
return 0;
double amountSum = 0;
foreach (Payment payment in Payments)
{
amountSum += payment.Amount;
}
return amountSum;
}
}
我能想到的唯一区别是性能,因为在第一种情况下,每次我们尝试获取 属性 的值时,getter 都会遍历整个列表。但是,您不必担心每次进行更改时都会调用 Update
方法,这可能会影响 属性 的值,就像在第二个选项中一样。这种差异真的很重要吗?除此之外,还有什么理由选择一个选项而不是另一个选项吗?
提前致谢
在读取 balance 的第一种方法中,您应该再次调用 getter,在第二种方法中没有 balance,我个人更喜欢 second method 因为它在调用时生成值所以你可以确保它总是更新并且它不需要调用函数并且然后读取值,使其 cleaner 更 maintainable.
要添加到 Kiani 的回答中,如果您不介意使用 Linq,您可以将您的代码变成单行代码。
private double Balance=>(!Payments.Any())?0:Payments.Sum(t=>t.Amount);
只是一个简短的问题,以便了解在更新 属性 的值与每次需要更改值时调用的方法之间是否有更好的做法,或者只是在getter.
比如这之间:
public double Balance { get; private set; }
private void UpdateBalance()
{
if (Payments.IsNullOrEmpty())
{
Balance = 0;
}
else
{
double amountSum = 0;
foreach (Payment payment in Payments)
{
amountSum += payment.Amount;
}
Balance = amountSum;
}
}
还有这个:
public double OtherBalance
{
get
{
if (Payments.IsNullOrEmpty())
return 0;
double amountSum = 0;
foreach (Payment payment in Payments)
{
amountSum += payment.Amount;
}
return amountSum;
}
}
我能想到的唯一区别是性能,因为在第一种情况下,每次我们尝试获取 属性 的值时,getter 都会遍历整个列表。但是,您不必担心每次进行更改时都会调用 Update
方法,这可能会影响 属性 的值,就像在第二个选项中一样。这种差异真的很重要吗?除此之外,还有什么理由选择一个选项而不是另一个选项吗?
提前致谢
在读取 balance 的第一种方法中,您应该再次调用 getter,在第二种方法中没有 balance,我个人更喜欢 second method 因为它在调用时生成值所以你可以确保它总是更新并且它不需要调用函数并且然后读取值,使其 cleaner 更 maintainable.
要添加到 Kiani 的回答中,如果您不介意使用 Linq,您可以将您的代码变成单行代码。
private double Balance=>(!Payments.Any())?0:Payments.Sum(t=>t.Amount);