2015-08-22 102 views
1

我環顧四周,但無法找到具體的答案來解決我的問題。從派生類中修改變量

這是我的抽象類賬戶的一部分,我很感興趣:

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一個派生類,其餘財產照片直接工作,利用取款()方法從我IWithdraw接口。

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; 
     } 
    } 

我的問題是如何最好地實現基地帳戶類的平衡財產?

我只希望派生類(那些將能夠提取或存款的賬戶)能夠修改它(因此受保護的集合)。

我應該將屬性設置爲受保護而不是公開或只保留setter保護?

+0

爲什麼要讓吸氣劑受到保護?其他班級不應讀取餘額的任何原因? – wimh

+0

取決於是否允許公開讀取餘額。這是一個設計決策問題。 – Rob

+0

如果你想讓任何人能夠讀取餘額,但只有派生類能夠設置它,那麼你就對了。使getter受保護只會允許派生類讀取平衡。 –

回答

1

屬性是語法糖,使訪問器更易於實現,但它們仍然編譯成常規方法。

如果你會談論方法而不是屬性,你將如何解決你的問題?我想你會以相同的解決方案結束:什麼修改Balance將被保護,並檢索其值將是public

如果您想公開訪問Balance,請將其保留public,否則請使用protected