Microsoft Word atd ma'ruzalar matni kid att ax




Download 403.57 Kb.
Pdf ko'rish
Sana07.03.2024
Hajmi403.57 Kb.
#168537
Bog'liq
2-maruza
8-mavzu, 1710913146


2-ma’ruza. Ichma-ich joylashgan sinflar 

Ichma-ich joylashgan sinflar tushunchasi. Ichma-ich sinflarni e’lon 
qilishning umumiy shakli 

Ichma-ich joylashgan sinflarga qoʻllanilishi mumkin boʻlgan ruxsat 
modifikatorlari 

Static ichki sinfni static boʻlmagan sinfda e’lon qilish va qoʻllash 

static ichma-ich joylashgan sinfning boshqa static sinfda e’lon qilinishi 
va qoʻllanilishiga misol 
Ichma-ich joylashgan sinflar tushunchasi. Ichma-ich sinflarni e’lon qilishning 
umumiy shakli 
C# dasturlash muhitida ixtiyoriy sinf qoʻllanilishida uning tarkibida boshqa 
sinf e’loni joylashishi mumkin. Boshqa sinf tanasida e’lon qilingan sinf – ichma-ich 
joylashgan sinf deyiladi.
Oddiy holatda sinf ichida boshqa sinfni e’lon qilish quyidagi koʻrinishda 
boʻladi: 
// boshqa sinf e’lonini oʻzida saqlovchi sinf
class
Outer

// Outer sinfi maydon va metodlari
// ...
class
Inner

// Inner sinfi maydon va metodlari
// ...

// Outer sinfi maydon va metodlari
// ...

bu yerda
Outer – oʻz tanasida Inner nomli boshqa sinf e’lonini saqlovchi sinf nomi; 
Inner – Outer sinfi ichida e’lon qilingan sinf nomi. 
Outer va Inner sinflari ruxsatni (private, protected, public) yoki sinfning 
boshqa xossalari (static, sealed va hk) ni aniqlovchi turli xil spetsifikatorlarni oʻz 
tarkibiga olishi mumkin. 
Ichma-ich sinf ob’yektini ichki sinf koʻrinadigan qilib e’lon qilingan 
holatdagina aniqlash mumkin. Bu shuni bildiradiki, koʻrinadigan ichki sinf private 
dan boshqa ixtiyoriy ruxsat modifikatori bilan e’lon qilingan boʻlishi kerak.


Agar ichki sinf private boʻlmagan sinf sifatida e’lon qilingan boʻlsa, u holda bu 
sinf nusxasini yaratish quyidagi koʻrinishda boʻladi: 
Outer
.
Inner
objInner = 
new
Outer
.
Inner
(); 
bu yerda 
Outer – tanasida ichki Inner sinfi e’lon qilingan tashqi sinf nomi; 
Inner – Outer sinfi ichida e’lon qilingan sinf nomi; 
objInner – yaratilayotgan sinf ob’yekti (nusxasi) nomi; 
Outer.Inner() – sinf ob’yektini yaratish uchun chaqiriladigan sukut boʻyicha 
konstruktor nomi. Agar Inner sinfida boshqa parametrli konstruktorlar qoʻllanilgan 
boʻlsa, u holda bu murojaat boshqacha boʻlishi mumkin.
Ichma-ich joylashgan sinflarga qoʻllanilishi mumkin boʻlgan ruxsat 
modifikatorlari 
Ichma-ich joylashgan sinflarga ham oddiy – ichma-ich boʻlmagan 
sinflardagidek ruxsat modifikatorlari qoʻllanilishi mumkin: 
private. Bu holatda ichma-ich sinf tashqi sinf tanasidagina “koʻrinadi”; 
public. Bu holatda ichma-ich joylashgan sinfga tashqi sinf chegarasida, tashqi 
sinf nusxasidan, voris sinfdan, shuningdek, toʻplam tashqarisan ham ruxsat boʻladi; 
protected. Bu holatda ichma-ich joylashgan sinfga tashqi sinf chegarasida, 
shuningdek, voris sinf metodlaridan ruxsat boʻladi; 
internal. Ichma-ich sinfga toʻplam chegarasida ruxsat bor va toʻplam 
chegarasidan tashqaridan ruxsat etilmaydi; 
protected internal. Ichma-ich sinfga tashqi sinf metodlaridan, voris sinf 
metodlaridan ruxsat boʻladi, joriy toʻplam chegarasidan tashqaridagi metodlardan 
ruxsat etilmaydi. 
Modifikatorlar harakati sinfning a’zo ma’lumotlari (metodlari) bilan bir xil.
Sinflarning turli ruxsat modifikatorlari bilan qoʻllanilishini namoyish 
qilishga misol: 
Misolda turli ruxsat modifikatorlariga ega ichma-ich joylashgan sinflarni e’lon 
qilish va ularga ruxsat namoyish etilgan. 
Tarkibida quyidagilar boʻlgan Outer sinfi e’lon qilinadi:
- d va sd nomli ikkita public-oʻzgaruvchi. sd oʻzgaruvchi static e’lon qilinadi; 
- Inner1 private-sinfga ruxsatni namoyosh etuvchi GetInnet1() ichki metodi; 
- private e’lon qilingan Inner1 nomli ichma-ich joylashgan sinf; 
- public e’lon qilingan Inner2 nomli ichma-ich joylashgan sinf; 
- internal e’lon qilingan Inner3 nomli ichma-ich joylashgan sinf; 
- protected e’lon qilingan Inner4 nomli ichma-ich joylashgan sinf;
- protected internal e’lon qilingan Inner5 nomli ichma-ich joylashgan sinf. 
Ixtiyoriy ichma-ich joylashgan sinfda e’lon qilinadi: 
- bitta static boʻlmagan butun tipli oʻzgaruvchi; 
- bitta static boʻlgan butun tipli oʻzgaruvchi. 
Outer sinfi dastur kodi quyidagicha: 
// Outer sinfi 5 ta ichma-ich joylashgan sinfga ega


public class
Outer

// Outer sinfi ichki oʻzgaruvchilari
public int
d; 
static public int
sd; 
// sinfning ichki metodidan Inner1 private-sinfiga ruxsat
public
Inner1
GetInner1() 

Inner1
i1 = 
new
Inner1
(); 
// Inner1 sinfi nusxasini yaratish 
// Inner1 sinfi a’zo ma’lumotlariga sinf nusxasidan ruxsat
i1.d1 = 25; 
// Inner1 sinfi static a’zosiga ruxsat
Inner1
.sd1 = 30; 
return 
i1; 

// Inner1 private-ichma-ich joylashgan sinf
private class
Inner1

public int
d1; 
public static int
sd1; 

// Inner2 public-ichma-ich joylashgan sinf
public class
Inner2

public int
d2; 
public static int
sd2; 

// Inner3 internal-ichma-ich joylashgan sinf
internal class
Inner3

public int
d3; 
public static int
sd3; 

// Inner4 protected-ichma-ich joylashgan sinf
protected class
Inner4

public int
d4; 


public static int
sd4; 

// Inner5 protected internal-ichma-ich joylashgan sinf
protected internal class
Inner5

public int
d5; 
public static int
sd5; 


Ba’zi metodlarda ichma-ich joylashgan sinflarni qoʻllanishi quyidagicha: 
// Outer.Inner1, Outer.Inner2, Outer ichnma-ich joylashgan sinflarning qoʻllanilishi
// 1. Outer sinfi ob’yektini e’lon qilish
Outer
o = 
new
Outer
(); 
o.d = 300; 
// ichki oʻzgaruvchiga Outer sinfi nusxasi orqali ruxsat
Outer
.sd = 230; 
// static oʻzgaruvchiga ruxsat
// 2. Inner1 private-sinfiga Outer sinfi nusxasidan ruxsat etilmaydi
// Outer.Inner1 i1; - xato, Inner1 sinfi private e’lon qilingan
// 3.Inner2 public sinfi ob’yektini e’lon qilish
Outer
.
Inner2
i2 = 
new
Outer
.
Inner2
(); 
i2.d2 = 440; 
Outer
.
Inner2
.sd2 = 500; 
// static oʻzgaruvchiga ruxsat
// 4. Inner3 internal-sinfini e’lon qilish
Outer
.
Inner3
i3 = 
new
Outer
.
Inner3
(); 
i3.d3 = 100; 
Outer
.
Inner3
.sd3 = 400; 
// static oʻzgaruvchiga ruxsat
// 5. protected-sinf ob’yekti faqat voris sinfdan e’lon qilinadi
// Outer.Inner4 i4; - xato
// 6. protected-internal-sinfi ob’yektini e’lon qilish mumkin
Outer
.
Inner5
i5 = 
new
Outer
.
Inner5
(); 
i5.d5 = 200; 
Outer
.
Inner5
.sd5 = -100; 
Yuqorida keltirilgan kodda koʻrinib turibdiki, faqat Inner2, Inner3, Inner5 
sinflari uchun ob’yekt yaratish mumkin. Inner4 protected-sinfi ob’yektini yaratish 
uchun Outer sinfi vorisi boʻlgan boshqa sinf e’lon qilinishi kerak, masalan: 
// Outer sinfidan voris olingan Outer2 sinfi 
class
Outer2

Outer



// voris olingan sinf metodida Inner4 protected-sinfiga ruxsat bor
void
SomeMethod() 

// Outer.Inner4 sinf nusxasini yaratish
Inner4
i4 = 
new
Inner4
(); 
// ishlaydi
i4.d4 = 23; 
// sinf nusxasi orqali ruxsat
Inner4
.sd4 = 330; 
// static oʻzgaruvchiga ruxsat


Shuningdek ushbu misolda ichma-ich joylashgan private-sinf unda e’lon 
qilingan static oʻzgaruvchiga boshqa sinf metodlaridan ruxsatni ham yashiradi. 
Shuningdek, ichma-ich joylashgan protected-sinflariga ruxasatni ham yashiradi. 
Static ichki sinfni static boʻlmagan sinfda e’lon qilish va qoʻllash 
Static boʻlmagan sinfda static sinf (static kalit soʻzi bilan) e’lon qilinishi 
mumkin. Bu shuni anglatadiki, ushbu sinf static sinfi unikal umumiy resursdir. Static 
sinf elementlariga ruxsat nuqtadan oldin tashqi sinf (sinflar) nomi (nomlari) yozilgan 
bevosita static sinf nomi bilan amalga oshiriladi.
Misol. Ichma-ich joylashgan static sinf Innerni tarkibiga oluvchi Outer sinfi 
e’lon qilinadi. Inner sinfida ichki static public-oʻzgaruvchi e’lon qilinadi. Outer sinfi 
matni quyidagicha: 
// Outer sinfi static emas
public class
Outer

// Outer sinfi ichki oʻzgaruvchisi
public int
d; 
static public int
sd; 
// Inner ichma-ich joylashgan static sinfi
public static class
Inner

// faqat static oʻzgaruvchilar static sinfda e’lon qilinishi mumkin
public static int
sd; 
// Inner sinfining ichki static oʻzgaruvchisi


Ichma-ich joylashgan static sinf taxminan quyidagicha qoʻllaniladi: 
// Outer.Inner static sinfining static oʻzgaruvchisiga ruxsat
Outer
.
Inner
.sd = 45; 
// Outer sinfi ob’yekti (nusxasi)ni yaratish
Outer
o = 
new
Outer
(); 
o.d = 30; 
// sinf nusxasi oʻzgaruvchisiga ob’yekt orqali ruxsat
Outer
.sd = 102; 
//Outer sinfi static oʻzgaruvchisiga ruxsat


// static sinf ob’yektini yaratish mumkin emas
//Outer.Inner i = new Outer.Inner(); - bu xato!
Statik sinfda static boʻlmagan ichma-ich joylashgan sinfni e’lon qilish 
mumkinmi? 
Ha, mumkin. Да, можно. Statik sinfda static boʻlmagan ichma-ich joylashgan 
sinfni e’lon qilish mumkin. Biroq, static sinfda static boʻlmagan oʻzgaruvchi va 
metodlarni e’lon qilish mumkin emas. 
Masalan. Aytaylik, tarkibida static boʻlmagan Inner sinfi qoʻllanilgan Outer 
static sinfi e’lon qilingan boʻlsin 
// Outer – static sinf
public static class
Outer 

// Outer sinfi ichki oʻzgaruvchisi
// static sinfda faqat static nusxalar e’lon qilinishi mumkin
// public int d; - xato!
static public int
sd; 
// static boʻlmagan ichma-ich joylashgan Inner sinfi static sinfda e’lon qilinishi 
mumkin
public class
Inner 

public int
d; 
// static boʻlmagan oʻzgaruvchi
public static int
sd; 
// Inner sinfi static ichki oʻzgaruvchisi


Outer va Outer.Inner sinflarining qoʻllanilishi, masalan, shunday boʻlishi 
mumkin: 
// static boʻlmagan sinfning static sinfda qoʻllanilishi
// Outer.Inner sinfi static oʻzgaruvchisi sd ga ruxsat
Outer
.
Inner
.sd = 230; 
// Outer sinfi static oʻzgaruvchisi sd ga ruxsat
Outer
.sd = 132; 
// static sinf nusxasi (ob’yekti)ni yaratish mumkin emas
// Outer o = new Outer(); // xato, chunki Outer – static sinf
// Outer.Inner ichma-ich joylashgan sinf nusxasini yaratish
Outer
.
Inner
i = 
new
Outer
.
Inner
(); 
і.d = 323; 
// Outer.Inner sinfi static boʻlmagan oʻzgaruvchisi d ga ruxsat
static ichma-ich joylashgan sinfning boshqa static sinfda e’lon qilinishi va 
qoʻllanilishiga misol 
Statik sinfda boshqa bir ichma-ich joylashgan static sinfni e’lon qilish mumkin. 
Bu yerda shuni unutmaslik kerakki, static sinflarda e’lon qilingan metodlar va 


oʻzgaruvchilar albatta sstatic boʻlishi kerak (sinflar bundan mustasno). Sinflar esa 
static boʻlmasligi ham mumkin.
Outer va Inner static sinflari e’loni berilgfan boʻlsin: 
// Outer sinfi- static 
public static class
Outer

// static sinflarda faqat static nusxalarni e’lon qilish mumkin
static public int
sd; 
// ichma-ich joylashgan Inner static sinfi – static sinfda e’lon qilinishi mumkin
public static class
Inner

// bu yerda faqat static elementlar
public static int
sd; 
// Inner sinfining static ichki oʻzgaruvchilari


U holda bu sinflarning static elementlarini qoʻllash quyidagicha boʻlishi 
mumkin: 
// static sinfda static sinfning qoʻllanilishi
// Outer.Inner sinfi static oʻzgaruvchisi sd ga ruxsat
Outer
.
Inner
.sd = 140; 
// Outer sinfi static oʻzgaruvchisi sd ga ruxsat
Outer
.sd = 110; 
// static sinf nusxasi (ob’yekti)ni yaratish mumkin emas
// Outer o = new Outer(); // xato, chunki Outer – static sinf
Foydalanish uchun adabiyot va manbalar: 
1. Троелсен Эндрю, Джепикс Филипп. Язык программирования C# 7 и 
платформы .NET и .NET Core. Вильямс. 2018 
2. A. Troelsen, P. Japikse. Pro C# 8 with .NET Core. Foundational Principles and 
Practices in Programming. Apress, 2020 
3. 
Албахари Бен, Албахари Джозеф. C# 7.0. Справочник. Полное описание 
языка. Пер. с англ.-СПб: “Альфа-книга”, 2018, -1024 с. 
4. 
https://www.bestprog.net/ru/2018/12/13/built-in-classes-built-in-static-classes-
declaring-and-using-built-in-classes-examples-ru/
5. https://www.youtube.com/watch?v=38eMHqe6MgM



Download 403.57 Kb.




Download 403.57 Kb.
Pdf ko'rish

Bosh sahifa
Aloqalar

    Bosh sahifa



Microsoft Word atd ma'ruzalar matni kid att ax

Download 403.57 Kb.
Pdf ko'rish