Sobes.tech
Junior

Quels sont les modificateurs d'accès en C#?

sobes.tech IA

Réponse de l'IA

En C# existent les modificateurs d'accès suivants :

  1. public : L'accès n'est pas limité. Les membres marqués comme public sont accessibles de n'importe où où leur type contenant est accessible.
  2. private : L'accès est limité à leur type contenant. Les membres marqués comme private ne sont accessibles que depuis le code à l'intérieur de la même classe ou structure.
  3. protected : L'accès est limité au type qui le contient ou aux types dérivés de ce type. Les membres marqués comme protected sont accessibles à l'intérieur de leur classe et dans les classes dérivées.
  4. internal : L'accès est limité à la compilation en cours (.dll ou .exe). Les membres marqués comme internal sont accessibles de n'importe où dans la même compilation.
  5. protected internal : L'accès est limité à la compilation en cours ou aux types dérivés du type qui le contient dans d'autres compilations. C'est une combinaison de protected et internal.
  6. private protected : L'accès est limité au type qui le contient ou aux types dérivés de ce type seulement dans la même compilation. C'est une combinaison de private et protected.
// Exemple d'utilisation des modificateurs d'accès
public class MyClass
{
    public int PublicField;        // Accessible de n'importe où
    private int PrivateField;      // Accessible uniquement à l'intérieur de MyClass
    protected int ProtectedField;  // Accessible à l'intérieur de MyClass et dans les classes dérivées
    internal int InternalField;    // Accessible à l'intérieur de la compilation en cours
    protected internal int ProtectedInternalField; // Accessible à l'intérieur de la compilation en cours OU dans les classes dérivées
    private protected int PrivateProtectedField; // Accessible à l'intérieur de MyClass OU dans les classes dérivées dans cette même compilation

    void MyMethod()
    {
        PrivateField = 10; // OK
    }
}

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // OK
        // PrivateField = 30; // Erreur - champ privé non accessible dans l'héritage
        ProtectedInternalField = 40; // OK
        PrivateProtectedField = 50; // OK
    }
}

public class AnotherClassInSameAssembly
{
    void AnotherMethod()
    {
        MyClass mc = new MyClass();
        mc.PublicField = 1; // OK
        mc.InternalField = 2; // OK
        mc.ProtectedInternalField = 3; // OK
        // mc.PrivateField = 4; // Erreur
        // mc.ProtectedField = 5; // Erreur
        // mc.PrivateProtectedField = 6; // Erreur
    }
}