2017-04-08 2 views
0

Hallo Leute, ich habe einige Probleme mit einem Programm in C#. Ich habe den folgenden Code in einer Basisklasse (die über zwei abgeleitete Klassen verfügt, die sich direkt auf _Balance beziehen).C# Vererbung - Hinzufügen von geschützten Membern für abgeleitete Klassen

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

Jetzt weiß ich, weil die _Balance privat, mein Programm kompiliert wird, nicht weil sie nicht zugänglich aufgrund seiner Schutzstufe. Ich weiß auch, dass ich dieser Klasse ein oder mehrere geschützte Mitglieder hinzufügen muss, damit abgeleitete Mitglieder _Balance ändern können. Ich weiß einfach nicht, was der beste Weg ist. Offensichtlich müssen auch direkte Referenzen auf _Balance in abgeleiteten Klassen geändert werden.

Jeder Rat würde sehr geschätzt werden, danke!

Antwort

0

Fügen Sie einen protected Setter zu Balance hinzu.

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

Dank Igor, aber es ist eine Frage aus dem Lehrbuch, die speziell darum bittet, _Balance privat zu halten und einen alternativen Weg zu finden, es durch die abgeleiteten Klassen zugänglich zu machen (und zwar durch das Hinzufügen neuer geschützter Mitglieder). – lonewolf2288

+0

@ lonewolf2288 - ok, aktualisiert – Igor

+0

Ihre Antwort (meiner Meinung nach) kann die Frage nicht beantworten, Sie könnten auch '{get; protected set;} 'aber dieser Typ sucht meiner Meinung nach die Implementierung von' Encapsulation' manuell. Und da er 'Textbook' erwähnt hat, ist es wahrscheinlich ein Test oder eine Aufgabe. – Transcendent

0

Nach dem, was Sie in Ihrem Kommentar auf der anderen answer gefragt, Sie Verkapselung manuell implementieren können (ohne eine Auto-Eigenschaft zu verwenden), wie im folgenden Code beschrieben:

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