Avatar ·

Modificateurs d'accès en C# : public, private, protected, internal — quelle est la différence et quand les utiliser ?

Bonjour à tous ! Je viens de commencer à apprendre C# et j'écris mes premières classes. J'ai buté sur les modificateurs d'accès. Je comprends à peu près que `public` signifie "pour tout le monde", `private` — "uniquement à l'intérieur de la classe", et `protected` — "pour les héritiers". Mais en pratique, je suis confus. Voici un exemple. J'ai une classe `BankAccount` :
class BankAccount
{
    public string AccountNumber { get; set; }
    private decimal balance = 0;
    protected decimal interestRate = 0.05m;

    public void Deposit(decimal amount)
    {
        balance += amount;
    }
}
Ensuite, je crée une classe `SavingsAccount` qui hérite de `BankAccount` :
class SavingsAccount : BankAccount
{
    public void ApplyInterest()
    {
        // Voici le problème : je peux utiliser interestRate (protected),
        // mais je ne peux pas utiliser balance (private).
        // C'est compréhensible. Mais que faire si je veux donner accès à balance
        // uniquement aux héritiers, mais pas à tous les autres ?