Sobes.tech
Junior

Koji su modifikatori pristupa u C#?

sobes.tech АИ

Одговор од АИ

U C# postoje sledeći modifikatori pristupa:

  1. public: Pristup nije ograničen. Članovi označeni kao public dostupni su sa bilo kog mesta gde je dostupan njihov sadržavajući tip.
  2. private: Pristup je ograničen na njihov sadržavajući tip. Članovi označeni kao private dostupni su samo iz koda unutar istog klase ili strukture.
  3. protected: Pristup je ograničen na sadržavajući tip ili tipove koji su izvedeni iz sadržavajućeg tipa. Članovi označeni kao protected dostupni su unutar svoje klase i u naslednim klasama.
  4. internal: Pristup je ograničen na trenutnu kompilaciju (.dll ili .exe). Članovi označeni kao internal dostupni su sa bilo kog mesta unutar iste kompilacije.
  5. protected internal: Pristup je ograničen na trenutnu kompilaciju ili tipove izvedene iz sadržavajućeg tipa u drugim kompilacijama. Ovo je kombinacija protected i internal.
  6. private protected: Pristup je ograničen na sadržavajući tip ili tipove izvedene iz sadržavajućeg tipa samo u istoj kompilaciji. Ovo je kombinacija private i protected.
// Primer korišćenja modifikatora pristupa
public class MyClass
{
    public int PublicField;        // Dostupan sa bilo kog mesta
    private int PrivateField;      // Dostupan samo unutar MyClass
    protected int ProtectedField;  // Dostupan unutar MyClass i u naslednim klasama
    internal int InternalField;    // Dostupan unutar trenutne kompilacije
    protected internal int ProtectedInternalField; // Dostupan unutar trenutne kompilacije ILI u naslednim klasama
    private protected int PrivateProtectedField; // Dostupan unutar MyClass ILI u naslednim klasama u istoj kompilaciji

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

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // OK
        // PrivateField = 30; // Greška - privatno polje nije dostupno u nasledniku
        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; // Greška
        // mc.ProtectedField = 5; // Greška
        // mc.PrivateProtectedField = 6; // Greška
    }
}