2017-04-08 74 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; 
    } 
}