Sobes.tech
Junior

Kādi ir piekļuves modifikatori C#?

sobes.tech AI

Atbilde no AI

C# valodā ir šādi piekļuves modifikatori:

  1. public: Piekļuve nav ierobežota. public atzīmētie locekļi ir pieejami no jebkuras vietas, kur ir pieejams to saturošais tips.
  2. private: Piekļuve ir ierobežota ar to saturošo tipu. private atzīmētie locekļi ir pieejami tikai no koda tajā pašā klasē vai struktūrā.
  3. protected: Piekļuve ir ierobežota ar saturošo tipu vai tipu, kas ir no tā atvasināts. protected atzīmētie locekļi ir pieejami savā klasē un atvasinātajās klasēs.
  4. internal: Piekļuve ir ierobežota ar pašreizējo būvējumu (.dll vai .exe). internal atzīmētie locekļi ir pieejami no jebkuras vietas tajā pašā būvējuma daļā.
  5. protected internal: Piekļuve ir ierobežota ar pašreizējo būvējumu vai tipu, kas ir no tā atvasināts citās būvējuma daļās. Tas ir protected un internal kombinācija.
  6. private protected: Piekļuve ir ierobežota ar saturošo tipu vai tipu, kas ir no tā atvasināts, tikai tajā pašā būvējuma daļā. Tas ir private un protected kombinācija.
// Piekļuves modifikatoru piemērs
public class MyClass
{
    public int PublicField;        // Pieejams no jebkuras vietas
    private int PrivateField;      // Pieejams tikai MyClass iekšienē
    protected int ProtectedField;  // Pieejams MyClass un atvasinātajās klasēs
    internal int InternalField;    // Pieejams pašreizējā būvējuma daļā
    protected internal int ProtectedInternalField; // Pieejams pašreizējā būvējuma daļā VAI atvasinātajās klasēs
    private protected int PrivateProtectedField; // Pieejams tikai MyClass un atvasinātajās klasēs tajā pašā būvējuma daļā

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

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // Labi
        // PrivateField = 30; // Kļūda - privāts lauks nav pieejams mantotajā klasē
        ProtectedInternalField = 40; // Labi
        PrivateProtectedField = 50; // Labi
    }
}

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