Avatar ·

Zugriffsmodifikatoren in C#: public, private, protected, internal — was ist der Unterschied und wann verwendet man was?

Hallo zusammen! Ich habe gerade angefangen, C# zu lernen und schreibe meine ersten Klassen. Ich bin über die Zugriffsmodifikatoren gestolpert. Ich verstehe zwar, dass `public` "für alle" bedeutet, `private` "nur innerhalb der Klasse" und `protected` "für Vererbende". Aber in der Praxis bin ich verwirrt. Hier ist ein Beispiel. Ich habe eine Klasse `BankAccount`:
class BankAccount
{
    public string AccountNumber { get; set; }
    private decimal balance = 0;
    protected decimal interestRate = 0.05m;

    public void Deposit(decimal amount)
    {
        balance += amount;
    }
}
Dann erstelle ich eine Klasse `SavingsAccount`, die von `BankAccount` erbt:
class SavingsAccount : BankAccount
{
    public void ApplyInterest()
    {
        // Hier ist das Problem: Ich kann interestRate (protected) verwenden,
        // aber nicht balance (private).
        // Das ist verständlich. Aber was mache ich, wenn ich Zugriff auf balance
        // nur für Vererbende gewähren möchte, aber nicht für alle anderen?
    }
}