2017-04-08 125 views
0

嗨,大家好我在C#中遇到了一些問題。我在基類中有以下代碼(它有2個派生類,可直接引用_Balance)。C#繼承 - 爲派生類添加受保護的成員

using System; 

namespace BankAccounts 
{ 
    class Account 
    { 
     protected Account(decimal balance) 
     { _Balance = balance; } 

     private decimal _Balance; 
     public decimal Balance 
     { 
      get { return _Balance; } 
     } 

     public override string ToString() 
     { 
      return string.Format("Balance: {0:c}", _Balance); 
     } 
    } 
} 

現在我知道是因爲_balance是私人的,我的程序是不是由於其保護級別編譯,因爲它是不可訪問。我也知道我需要向該類添加一個或多個受保護的成員,以允許派生成員修改_Balance。我只是不知道什麼是最好的方式。顯然直接引用_Balance在派生類中也需要改變。

任何意見將不勝感激,謝謝!

回答

0

將一個protected二傳手加到Balance

using System; 
namespace BankAccounts 
{ 
    class Account 
    { 
     protected Account(decimal balance) 
     { _Balance = balance; } 

     protected decimal _Balance; 
     public decimal Balance 
     { 
      get { return _Balance; } 
      protected set { _Balance = value; } 
     } 

     public override string ToString() 
     { 
      return string.Format("Balance: {0:c}", _Balance); 
     } 
    } 
+0

感謝伊戈爾,但它是一個教科書中的問題,它特別要求保持_Balance私人並找到使派生類可訪問的替代方法(即通過添加新的受保護成員)。 – lonewolf2288

+0

@ lonewolf2288 - 好的,更新了 – Igor

+0

你的回答(在我看來)可能不會回答這個問題,你也可以做'{get; protected set;}'但我認爲這個人正在尋找手動實現'Encapsulation'。自從他提到「教科書」以來,這可能是一個考驗或任務。 – Transcendent

0

根據您在您的評論問有關其他answer,您可以手動執行封裝(不使用自動屬性),如下面的代碼描述:

public class Account{ 

    private Decimal Balance; // Since you mentioned this private field is a MUST 
    public Decimal GetBalance() { 
     return Balance; 
    } 
    // Or public depending on your needs 
    protected void SetBalance(Decimal Balance) { 
     this.Balance = Balance; 
    } 
}