[英]Modifying get accessor c#
使用访问器而不仅仅是速记,这是很新的。 我试图基于另一个属性更改一个属性,而不能将其设置在其他位置。 从本质上讲,我想拥有它。
public int Salary { get; set; }
public int Tax
{
get
{
if (Salary > 2000)
{
return Tax = 20;
}
else if (Salary > 1500)
{
return Tax = 10;
}
else
{
return Tax = 5;
}
}
}
这样就无法更改Tax属性本身,但是我收到一条错误消息,说“属性客户。不能分配给纳税人,因为它是只读的”,并且我理解了这个问题,但是我不知道如何解决这个问题。
这是吸气剂 。 您无需在getter中设置值。 如果使用它来设置值,那么它将是一个setter。 吸气剂只是得到一个值。 Tax
“具有”的唯一值是getter返回的值。
public int Tax
{
get
{
if (Salary > 2000)
{
return 20;
}
else if (Salary > 1500)
{
return 10;
}
else
{
return 5;
}
}
}
如果祖母有轮子,她会坐火车。 如果您只是制定一条规则“永远不要在吸气器中设置任何东西”,那么您生活中的不确定性就会下降很多。
唯一的例外是为readonly属性初始化一个私有后备字段,该属性返回一个昂贵的对象,该对象只需要初始化一次:
private ReadOnlyCollection<String> _states;
public ReadOnlyCollection<String> States; {
get {
if (_states == null) {
_states = new ReadOnlyCollection(DB.GetStates().ToList());
}
return _states;
}
}
如果Tax
是只读的,则它与“经典”方法(如GetTax()
)非常相似:
public int Tax
{
get
{
if (Salary > 2000)
{
return 20;
}
else if (Salary > 1500)
{
return 10;
}
else
{
return 5;
}
}
}
没有分配...每次查询Tax
,都会计算其值。
最后,属性只是将“ getter”和“ setter”这两种方法“保持在一起”的绝招。通常,这两种方法在后备字段(保存属性值的字段)上“起作用”。 显然,在您的情况下,您没有后备领域,也没有二传手。 您只有一个总是被重新计算的吸气剂。 某些语言(如Java)没有这种“技巧”, getFoo()
直接使用诸如getFoo()
和setFoo()
类的属性,并且setFoo()
得很好。
您还可以通过以下方法解决此问题:在设置Salary属性时确定税款,并对Tax属性使用私有设置器。 这意味着您不必在每次致电时都重新计算税收(当然,对这些小数目也不会有太大影响,但是根据项目的不同,这将很有用)
public class PayCheck {
private double _salary = -1;
public double Salary {
get => _salary;
set {
_salary = value;
if (value > 2000)
Tax = 20;
else if (value > 1500)
Tax = 10;
else
Tax = 5;
}
}
public double Tax { get; private set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.