Sobes.tech
Junior

Aké sú modifikátory prístupu v C#?

sobes.tech AI

Odpoveď od AI

V jazyku C# existujú nasledujúce modifikátory prístupu:

  1. public: Prístup nie je obmedzený. Členovia označení ako public sú dostupní z akéhokoľvek miesta, kde je dostupný ich obsahujúci typ.
  2. private: Prístup je obmedzený na ich obsahujúci typ. Členovia označení ako private sú dostupní iba z kódu v rámci rovnakej triedy alebo štruktúry.
  3. protected: Prístup je obmedzený na obsahujúci typ alebo typy odvodené od neho. Členovia označení ako protected sú dostupní v rámci svojej triedy a v odvodzujúcich triedach.
  4. internal: Prístup je obmedzený na aktuálnu zostavu (.dll alebo .exe). Členovia označení ako internal sú dostupní z akéhokoľvek miesta v rámci tej istej zostavy.
  5. protected internal: Prístup je obmedzený na aktuálnu zostavu alebo typy odvodené od neho v iných zostavách. Ide o kombináciu protected a internal.
  6. private protected: Prístup je obmedzený na obsahujúci typ alebo typy odvodené od neho len v rámci tej istej zostavy. Ide o kombináciu private a protected.
// Príklad použitia modifikátorov prístupu
public class MyClass
{
    public int PublicField;        // Dostupné z akéhokoľvek miesta
    private int PrivateField;      // Dostupné iba v rámci MyClass
    protected int ProtectedField;  // Dostupné v rámci MyClass a v odvodzujúcich triedach
    internal int InternalField;    // Dostupné v rámci aktuálnej zostavy
    protected internal int ProtectedInternalField; // Dostupné v rámci aktuálnej zostavy ALEBO v odvodzujúcich triedach
    private protected int PrivateProtectedField; // Dostupné v rámci MyClass ALEBO v odvodzujúcich triedach v tej istej zostave

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

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // OK
        // PrivateField = 30; // Chyba - súkromné pole nie je dostupné v potomkovi
        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
    }
}