Sobes.tech
Junior

Kokie yra prieigos modifikatoriai C#?

sobes.tech AI

Atsakymas iš AI

C# kalboje yra šie prieigos modifikatoriai:

  1. public: Prieiga nėra ribojama. public pažymėti nariai yra prieinami iš bet kurios vietos, kur yra prieinamas jų turintis tipas.
  2. private: Prieiga yra ribojama jų turinčio tipo. private pažymėti nariai yra prieinami tik iš kodo to paties klases ar struktūros viduje.
  3. protected: Prieiga yra ribojama arba turinčio tipo, arba jo paveldimų tipų. protected pažymėti nariai yra prieinami savo klasės ir paveldimų klasių viduje.
  4. internal: Prieiga yra ribojama dabartiniam surinkimui (.dll arba .exe). internal pažymėti nariai yra prieinami iš bet kurios vietos to paties surinkimo viduje.
  5. protected internal: Prieiga yra ribojama dabartiniam surinkimui arba tipams, paveldėjusiems iš turinčio tipo, kitose surinkimuose. Tai yra protected ir internal derinys.
  6. private protected: Prieiga yra ribojama turinčiam tipui arba jo paveldėjimo tipams tik toje pačioje surinkimoje. Tai yra private ir protected derinys.
// Pavyzdys naudojant prieigos modifikatorius
public class MyClass
{
    public int PublicField;        // Prieinama iš bet kurios vietos
    private int PrivateField;      // Prieinama tik MyClass viduje
    protected int ProtectedField;  // Prieinama MyClass ir paveldėjimo klasėse
    internal int InternalField;    // Prieinama dabartiniame surinkime
    protected internal int ProtectedInternalField; // Prieinama dabartiniame surinkime ARBA paveldėjimo klasėse
    private protected int PrivateProtectedField; // Prieinama tik MyClass ir paveldėjimo klasėse toje pačioje surinkimoje

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

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // Gerai
        // PrivateField = 30; // Klaida - privačios lauko negalima pasiekti paveldėtojoje klasėje
        ProtectedInternalField = 40; // Gerai
        PrivateProtectedField = 50; // Gerai
    }
}

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