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; // Жақсы
    }
}

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // Жақсы
        // PrivateField = 30; // Қате - жеке өріс мұрагерлікке қол жетімді емес
        ProtectedInternalField = 40; // Жақсы
        PrivateProtectedField = 50; // Жақсы
    }
}

public class AnotherClassInSameAssembly
{
    void AnotherMethod()
    {
        MyClass mc = new MyClass();
        mc.PublicField = 1; // Жақсы
        mc.InternalField = 2; // Жақсы
        mc.ProtectedInternalField = 3; // Жақсы
        // mc.PrivateField = 4; // Қате
        // mc.ProtectedField = 5; // Қате
        // mc.PrivateProtectedField = 6; // Қате
    }
}