Avatar ·

Modificadores de acceso en C#: public, private, protected, internal — cuál es la diferencia y cuándo usar cada uno

¡Hola a todos! Acabo de empezar a aprender C# y estoy escribiendo mis primeras clases. Me he topado con los modificadores de acceso. Parece que entiendo que `public` es "para todos", `private` es "solo dentro de la clase", y `protected` es "para los herederos". Pero en la práctica me confundo. Aquí hay un ejemplo. Tengo una clase `BankAccount`:
class BankAccount
{
    public string AccountNumber { get; set; }
    private decimal balance = 0;
    protected decimal interestRate = 0.05m;

    public void Deposit(decimal amount)
    {
        balance += amount;
    }
}
Luego creo una clase `SavingsAccount` que hereda de `BankAccount`:
class SavingsAccount : BankAccount
{
    public void ApplyInterest()
    {
        // Aquí está el problema: puedo usar interestRate (protected),
        // pero no puedo usar balance (private).
        // Esto es comprensible. Pero ¿qué hago si quiero dar acceso a balance
        // solo a los herederos, pero no a todos los demás?
    }
}