C# 从派生类修改变量
我环顾四周,但找不到我问题的具体答案 这是我感兴趣的抽象类帐户的一部分:C# 从派生类修改变量,c#,C#,我环顾四周,但找不到我问题的具体答案 这是我感兴趣的抽象类帐户的一部分: public abstract class Account { private decimal balance; public decimal Balance { get { return this.balance; } protected set { if (value &l
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;
}
}
我的问题是如何在基本Account类中最好地实现Balance属性
我只希望派生类(那些能够取款或存款的帐户)能够修改它(因此是受保护的集合)
我应该将属性设置为protected,而不是public,还是只保护setter?属性是语法上的糖衣,使访问器更容易实现,但它们仍然编译为常规方法 如果您谈论的是方法而不是属性,您将如何解决您的问题?我猜您会以相同的解决方案结束:修改
余额的内容将受到保护,检索其值将是public
如果要公开访问余额
,请将其保留为公共
,否则请使用受保护
为什么要使getter受保护?其他类不应该读取余额的任何原因?取决于是否允许公开读取余额。这是一个设计决策问题。如果您想让任何人都能够读取平衡,但只有派生类能够设置平衡,那么您就做对了。保护getter只允许派生类读取balance。也许您应该考虑将decimal balance{get;}
设置为虚拟属性。您应该考虑允许负余额的账户。例如抵押贷款账户。
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;
}
}