Sobes.tech
Junior

Millised on juurdepääsukorraldajad C#-s

sobes.tech AI

Vastus AI-lt

C# keeles on järgmised juurdepääsukorraldajad:

  1. public: Juurdepääs ei ole piiratud. public-märgitud liikmed on kättesaadavad igast kohast, kus on nende sisaldav tüüp saadaval.
  2. private: Juurdepääs on piiratud nende sisaldava tüübi poolt. private-märgitud liikmed on kättesaadavad ainult sama klassi või struktuuri koodist.
  3. protected: Juurdepääs on piiratud või sisaldava tüübi või selle pärilike tüüpide poolt. protected-märgitud liikmed on kättesaadavad oma klassi ja pärilike klasside sees.
  4. internal: Juurdepääs on piiratud praeguse koostuse (.dll või .exe) piires. internal-märgitud liikmed on kättesaadavad igast kohast sama koostuse sees.
  5. protected internal: Juurdepääs on piiratud praeguse koostuse või selle pärilike tüüpide poolt teistes koostustes. See on protected ja internal kombinatsioon.
  6. private protected: Juurdepääs on piiratud sisaldava tüübi või selle pärilike tüüpide poolt ainult samas koostuses. See on private ja protected kombinatsioon.
// Juurdepääsukorraldajate näide
public class MyClass
{
    public int PublicField;        // Saadaval igast kohast
    private int PrivateField;      // Saadaval ainult MyClass sees
    protected int ProtectedField;  // Saadaval MyClass ja pärilikes klassides
    internal int InternalField;    // Saadaval praeguses koostuses
    protected internal int ProtectedInternalField; // Saadaval praeguses koostuses VÕI pärilikes klassides
    private protected int PrivateProtectedField; // Saadaval ainult MyClass ja pärilikes klassides samas koostuses

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

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // OK
        // PrivateField = 30; // Viga - privaatne väli ei ole pärilikus nähtav
        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; // Viga
        // mc.ProtectedField = 5; // Viga
        // mc.PrivateProtectedField = 6; // Viga
    }
}