我环顾四周但找不到我问题的具体答案。
这是我感兴趣的抽象类帐户的一部分:
public abstract class Account
{
private decimal balance;
public decimal Balance
{
get
{
return this.balance;
}
protected set
{
if (value < 0)
{
throw new ArgumentException("Balance can't be negative");
}
balance = value;
}
}
protected Account(decimal balance)
{
this.Balance = balance;
}
}
现在我有一个名为DepositAccount的派生类,它使用Balance属性工作,使用IWithdraw接口的Withdraw()方法。
public class DepositAccount : Account, IWithdraw
{
public DepositAccount(decimal balance)
: base(balance)
{
}
public void Withdraw(decimal amount)
{
if (amount > this.Balance)
{
throw new ArgumentException("Not enough balance!");
}
this.Balance -= Balance;
}
}
我的问题是如何在基础帐户类中最好地实现Balance属性?
我只想要派生类(那些能够提取或存钱的帐户)才能修改它(因此受保护的集合)。
我应该将属性设置为受保护而不是公共或仅保留setter吗?
答案 0 :(得分:1)
属性是语法糖,使访问器更容易和更优雅地实现,但它们仍然可以编译成常规方法。
如果您要讨论方法而不是属性,您将如何解决问题?我想你会以相同的解决方案结束:修改Balance
的内容会受到保护,并且检索其值将是public
。
如果您想公开访问Balance
,请保留public
,否则请使用protected
。