1-Mavzu 1-Mavzu Reja: Klass a’zolariga ruxsatni boshqarish


Ruxsat modifikatorini aniq belgilashga misol


Download 116.94 Kb.
bet12/100
Sana02.01.2022
Hajmi116.94 Kb.
#200801
1   ...   8   9   10   11   12   13   14   15   ...   100
Bog'liq
dasturiy injinering

Ruxsat modifikatorini aniq belgilashga misol:

1

2

3

4

5

6

7

8

private protected class State

{

    internal int a;

    protected void Print()

    {

        Console.WriteLine($"a = {a}");

    }



}

Ruxsatni ko`rsatmasak ham bo`ladi:

1

2

3

4

5

6

7

8

class State

{

    int a;

    void Print()

    {

        Console.WriteLine($"a = {a}");

    }



}

Agar ruxsat modifikatori maydonlar va metodlarda belgilanmagan bo'lsa, bunday holda ularga odatda private modifikatori qo'llaniladi.

Modifikatorsiz e'lon qilingan sinflar va tuzilma(struktura)lar uchun odatda internal modefikatori qo'llaniladi.

To'g'ridan-to'g'ri nomlari yozilgan va boshqa sinflarni o`z ichiga olmagan barcha sinflar va strukturalar faqat puclic yoki internal modifikatorlarida bo'lishi mumkin.

Keling, misol sifatida navbatdagi State sinfini yaratishni ko`rib chiqaylik:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

public class State

{

    // bu tushunarli,  private int defaultVar;

    int defaultVar;

    // bu maydonga faqat shu sinfda ruxsat mavjud

    private int privateVar;

    // shu loyihadada aniqlangan joriy sinf va shu sinfdan tuzilgan sinflarda

    // foydalanish mumkin

    protected private int protectedPrivateVar;

    // joriy sinf va shu sinfdan tuzilgan sinflarda ruxsat mavjud

    protected int protectedVar;

    // loyihaning har qanday joyidan ruxsat mavjud

    internal int internalVar;

    // loyihaning har qanday joyidan va boshqa loyihalarda shu sinf

    // merosxo'rlaridan foydalanishga ruxsat mumkin

    protected internal int protectedInternalVar;

    // dasturning istalgan joyida, shuningdek, boshqa dastur va majmualarda

    // ruxsat mavjud

    public int publicVar;

 

    // odatiy private modifikatori mavjud



    void defaultMethod() => Console.WriteLine($"defaultVar = {defaultVar}");

 

    // metodga faqat joriy sinfda ruxsat mavjud



    private void privateMethod() => Console.WriteLine($"privateVar = {privateVar}");

 

    // shu loyihada aniqlangan joriy sinf va shu sinfdan tuzilgan sinflarda



    // foydalanish mumkin

    protected private void protectedPrivateMethod() => Console.WriteLine($"protectedPrivateVar = {protectedPrivateVar}");

 

    // joriy sinf va shu sinfdan tuzilgan sinflarda foydalanish mumkin



    protected void protectedMethod()=> Console.WriteLine($"protectedVar = {protectedVar}");

     


    // loyihaning har qanday joyida ruxsat mavjud

    internal void internalMethod() => Console.WriteLine($"internalVar = {internalVar}");

     

    // joriy loyihaning istalgan joyidan va boshqa loyihalardagi shu sinf



    // merosxo'rlaridan foydalanish mumkin

    protected internal void protectedInternalMethod() => Console.WriteLine($"protectedInternalVar = {protectedInternalVar}");

     

    // dasturning istalgan joyida, shuningdek, boshqa dasturlar va majmualarda     // ruxsat mavjud



    public void publicMethod() => Console.WriteLine($"publicVar = {publicVar}");

    }



State klassi public modifikator bilan e'lon qilinganligi sababli, udan dasturning istalgan joyida, shuningdek, boshqa dasturlarda va majmualarda foydalanish mumkin bo'ladi. State klassida har bir ruxsat darajasi uchun beshta maydonga ega. Bundan tashqari, modifikatorsiz odat bo'yicha yopiq (private) holatda bitta o'zgaruvchi mavjud.

Bundan tashqari, sinf maydonlarining qiymatlarini ekranda ko'rsatuvchi oltita metod aniqlangan. Unutmang, State kontekstida bo'lgani kabi barcha modifikatorlar har bir sinfga o`z ichidagi barcha sinf a'zolaridan, o'zgaruvchilar va metodlar, shu jumladan yopiqlaridan ham foydalanish imkonini beradi.

Agar State va dastur bitta loyihada bo'lsa, biz dasturda sinfimiz o'zgaruvchilarini qanday ishlatish mumkinligini ko'rib chiqa olamiz (ya'ni, sinf dasturidagi Main metodida):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

class Program

{

    static void Main(string[] args)

    {

        State state1 = new State();

 

        // defaultVar o'zgaruvchiga qiymat bera olmaymiz,



        //u private modifikatoriga ega, shu sababli dastur sinfi uni ko'rmaydi

        // bu satrni muhit noto'g'ri deb belgilaydi

        state1.defaultVar = 5; // Xatolik, foydalanishga ruxsat mavjud emas

 

        // bu privateVar o'zgaruvchi uchun ham amal qiladi



        state1.privateVar = 5; // Xatolik, foydalanishga ruxsat mavjud emas

 

        // protectedPrivateVar o'zgaruvchisiga qiymat berib bo`lmaydi,



        // dastur sinfi State sinfiga merosxo'r emas

   state1.protectedPrivateVar =5; // Xatolik, foydalanishga ruxsat mavjud emas

 

        // protectedVar o'zgaruvchisiga qiymat berib bo`lmaydi,



        // dastur sinfi State sinfiga merosxo'r emas

        state1.protectedVar = 5; // Xatolik, foydalanishga ruxsat mavjud emas

 

        // Internal modifikatorli internalvar o'zgaruvchiga joriy loyihaning istalgan         // joyida ruxsat mavjud



        // shuning uchun biz uning qiymatini bemalol o`zgartira olamiz

        state1.internalVar = 5;

 

        // protectedInternalVar o'zgaruvchisiga ham joriy loyihaning istalgan         // joyida ruxsat mavjud



        state1.protectedInternalVar = 5;

 

        // publicVar o'zgaruvchisi umumiydir



        state1.publicVar = 5;

    }



}

Shunday qilib, kontentda faqat  internalVar, protectedInternalVar va publicVar o'zgaruvchilarining modifikatorlari bergan ruxsatdan foydalanib ularning qiymatlarini o`zgartirish imkoniga ega bo`ldik.

Metodlar bilan ham xuddi shunday vaziyat mavjud:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

class Program

{

    static void Main(string[] args)

    {

        State state1 = new State();

 

        state1.defaultMethod(); // Xatolik, foydalanishga ruxsat mavjud emas



 

        state1.privateMethod(); // Xatolik, foydalanishga ruxsat mavjud emas

 

 state1.protectedPrivateMethod(); // Xatolik, foydalanishga ruxsat mavjud emas



 

        state1.protectedMethod(); // Xatolik, foydalanishga ruxsat mavjud emas

 

        state1.internalMethod();    // me`yoriy talab



 

        state1.protectedInternalMethod();  // me`yoriy talab

 

        state1.publicMethod();      // me`yoriy talab



    }

}

Bu erda faqat uchta metodga modifikatorlari internal, protected internal, public bo`lganligi uchun ruxsat mavjud: internalMethod, protectedInternalMethod, publicMethod.

Ushbu ruxsat modifikatorlari tizimi tufayli dasturning boshqa qismlaridan sinfingizning ayrim qismlarini yashirishingiz mumkin.

Garchi public va internal modifikatorlari o'zlarining xususiyatlarida o'xshashliklar bo'lsada, lekin ular bir biridan katta farqga ega. Agar sinf ma'lumotlarning dinamik DLL kutubxonasiga joylashtirilsa va undan keyin ushbu dasturlarda ishlatilsa,  u holda public modifikatorli sinflar va sinf  a'zolaridan boshqa dasturlar ham foydalanish huquqida ega bo'ladi.


Download 116.94 Kb.

Do'stlaringiz bilan baham:
1   ...   8   9   10   11   12   13   14   15   ...   100




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling