Sobes.tech
Junior

Ce modificatori de acces există în C#?

sobes.tech AI

Răspuns de la AI

În C# există următorii modificatori de acces:

  1. public: Accesul nu este restricționat. Membrii marcați ca public sunt accesibili din orice loc unde este accesibil tipul lor conținător.
  2. private: Accesul este restricționat la tipul lor conținător. Membrii marcați ca private sunt accesibili doar din codul din interiorul aceleiași clase sau structuri.
  3. protected: Accesul este restricționat la tipul care îl conține sau la tipurile derivate din acesta. Membrii marcați ca protected sunt accesibili în interiorul clasei și în clasele moștenitoare.
  4. internal: Accesul este restricționat la compilarea curentă (.dll sau .exe). Membrii marcați ca internal sunt accesibili din orice loc în interiorul aceleiași compilări.
  5. protected internal: Accesul este restricționat la compilarea curentă sau la tipurile derivate ale tipului care îl conține în alte compilări. Este o combinație de protected și internal.
  6. private protected: Accesul este restricționat la tipul care îl conține sau la tipurile derivate ale acestuia doar în aceeași compilare. Este o combinație de private și protected.
// Exemplu de utilizare a modificatorilor de acces
public class MyClass
{
    public int PublicField;        // Accesibil din orice loc
    private int PrivateField;      // Accesibil doar în interiorul MyClass
    protected int ProtectedField;  // Accesibil în interiorul MyClass și în clasele moștenitoare
    internal int InternalField;    // Accesibil în interiorul compilării curente
    protected internal int ProtectedInternalField; // Accesibil în interiorul compilării curente SAU în clasele moștenitoare
    private protected int PrivateProtectedField; // Accesibil în interiorul MyClass SAU în clasele moștenitoare în aceeași compilare

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

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // OK
        // PrivateField = 30; // Eroare - câmp privat nu este accesibil în moștenire
        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; // Eroare
        // mc.ProtectedField = 5; // Eroare
        // mc.PrivateProtectedField = 6; // Eroare
    }
}