Sobes.tech
Junior

Jaké jsou modifikátory přístupu v C#?

sobes.tech AI

Odpověď od AI

V jazyce C# existují následující modifikátory přístupu:

  1. public: Přístup není omezen. Členové označení jako public jsou přístupní odkudkoli, kde je přístupný jejich obsahující typ.
  2. private: Přístup je omezen na jejich obsahující typ. Členové označení jako private jsou přístupní pouze z kódu uvnitř stejné třídy nebo struktury.
  3. protected: Přístup je omezen na obsahující typ nebo odvozené typy od něj. Členové označení jako protected jsou přístupní uvnitř své třídy a v odvozených třídách.
  4. internal: Přístup je omezen na aktuální sestavení (.dll nebo .exe). Členové označení jako internal jsou přístupní odkudkoli uvnitř stejného sestavení.
  5. protected internal: Přístup je omezen na aktuální sestavení nebo odvozené typy od obsahujícího typu v jiných sestaveních. Je to kombinace protected a internal.
  6. private protected: Přístup je omezen na obsahující typ nebo odvozené typy od něj pouze ve stejném sestavení. Je to kombinace private a protected.
// Příklad použití modifikátorů přístupu
public class MyClass
{
    public int PublicField;        // Přístupný odkudkoli
    private int PrivateField;      // Přístupný pouze uvnitř MyClass
    protected int ProtectedField;  // Přístupný uvnitř MyClass a v odvozených třídách
    internal int InternalField;    // Přístupný uvnitř aktuálního sestavení
    protected internal int ProtectedInternalField; // Přístupný uvnitř aktuálního sestavení NEBO v odvozených třídách
    private protected int PrivateProtectedField; // Přístupný uvnitř MyClass NEBO v odvozených třídách ve stejném sestavení

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

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // OK
        // PrivateField = 30; // Chyba - soukromé pole není přístupné v dědičnosti
        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; // Chyba
        // mc.ProtectedField = 5; // Chyba
        // mc.PrivateProtectedField = 6; // Chyba
    }
}