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; // Խնդիր
    }
}