Sobes.tech
Junior

C# da kirish modifikatorlari qanday?

sobes.tech AI

AIdan javob

C# tilida quyidagi kirish modifikatorlari mavjud:

  1. public: Kirish cheklanmagan. public bilan belgilangan a'zolar, ularning qamrab oluvchi turi kirish mumkin bo'lgan joydan har qanday joydan kirish mumkin.
  2. private: Kirish, ularni qamrab oluvchi tur bilan cheklangan. private bilan belgilangan a'zolar, faqat shuningdek, ularning sinfi yoki strukturasida koddan kirish mumkin.
  3. protected: Kirish, ularni qamrab oluvchi tur yoki undan meros olgan turlar bilan cheklangan. protected bilan belgilangan a'zolar, o'z sinfi va meros olgan sinflarda kirish mumkin.
  4. internal: Kirish, joriy yig'ish bilan cheklangan (.dll yoki .exe). internal bilan belgilangan a'zolar, joriy yig'ishda har qanday joydan kirish mumkin.
  5. protected internal: Kirish, joriy yig'ish yoki boshqa yig'ishlardagi meros olgan turlar bilan cheklangan. Bu protected va internal ning kombinatsiyasi.
  6. private protected: Kirish, ularni qamrab oluvchi tur yoki undan meros olgan turlar bilan, faqat ayni yig'ishda cheklangan. Bu private va protected ning kombinatsiyasi.
// Kirish modifikatorlaridan foydalanish misoli
public class MyClass
{
    public int PublicField;        // Har qanday joydan kirish mumkin
    private int PrivateField;      // Faqat MyClass ichida kirish mumkin
    protected int ProtectedField;  // MyClass va meros olgan sinflarda kirish mumkin
    internal int InternalField;    // Joriy yig'ishda kirish mumkin
    protected internal int ProtectedInternalField; // Joriy yig'ishda yoki meros olgan sinflarda kirish mumkin
    private protected int PrivateProtectedField; // MyClass yoki bu yig'ishda meros olgan sinflarda kirish mumkin

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

public class DerivedClass : MyClass
{
    void DerivedMethod()
    {
        ProtectedField = 20; // OK
        // PrivateField = 30; // Xato - shaxsiy maydon merosda kirish mumkin emas
        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; // Xato
        // mc.ProtectedField = 5; // Xato
        // mc.PrivateProtectedField = 6; // Xato
    }
}