Sobes.tech
Junior

Кадом модификатори дастрасӣ дар C# мавҷуданд?

sobes.tech AI

Ҷавоб аз AI

Дар C# існуючи наступні модифікатори доступу:

  1. public: Доступ не обмежений. Члени, позначені як public, доступні з будь-якого місця, де доступний їхній містить тип.
  2. private: Доступ обмежений їхнім містить типом. Члени, позначені як private, доступні лише з коду всередині того ж класу або структури.
  3. protected: Доступ обмежений або містить тип, або типами, що похідні від містить типу. Члени, позначені як protected, доступні всередині свого класу та у похідних класах.
  4. internal: Доступ обмежений поточною збіркою (.dll або .exe). Члени, позначені як internal, доступні з будь-якого місця всередині тієї ж збірки.
  5. protected internal: Доступ обмежений поточною збіркою або типами, що похідні від містить типу, в інших збірках. Це комбінація protected і internal.
  6. private protected: Доступ обмежений містить типом або типами, що похідні від містить типу, тільки у тій же збірці. Це комбінація private і protected.
// Приклад використання модифікаторів доступу
public class MyClass
{
    public int PublicField;        // Доступний з будь-якого місця
    private int PrivateField;      // Доступний лише всередині MyClass
    protected int ProtectedField;  // Доступний всередині MyClass і у похідних класах
    internal int InternalField;    // Доступний всередині поточної збірки
    protected internal int ProtectedInternalField; // Доступний всередині поточної збірки АБО у похідних класах
    private protected int PrivateProtectedField; // Доступний всередині MyClass АБО у похідних класах у цій же збірці

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

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // OK
        // PrivateField = 30; // Помилка - приватне поле недоступне у нащадку
        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; // Помилка
        // mc.ProtectedField = 5; // Помилка
        // mc.PrivateProtectedField = 6; // Помилка
    }
}