O’zgaruvchilar O'zgaruvchilar



Download 139,1 Kb.
bet16/21
Sana31.12.2021
Hajmi139,1 Kb.
#264759
1   ...   13   14   15   16   17   18   19   20   21
Bog'liq
2 5393515008560729936

Strukturalar

Sinf kabi struktura ham konstruktorlarni aniqlay oladi. Ammo sinfdan farqli o'laroq, struktura ob'ektini yaratish uchun konstruktorni chaqirishga hojat yo'q:

User ali;

Ammo, agar shu tarzda struktura ob'ekti yaratiladigan bo'lsa, unda ularning qiymatlarini olishdan oldin yoki struktura metodlarini chaqirishdan oldin strukturaning barcha maydonlarini (global o'zgaruvchilarini) initsalizatsiya qilish kerak. Ya'ni, masalan, quyidagi holatda xatolik yuz beradi, chunki maydonlarga va metodlarga murojaat ularga boshlang'ich qiymatlarni berishdan oldin sodir bo'ladi:


User ali;

int x = ali.age; // Xatolik

ali.DisplayInfo(); // Xatolik

Parametrlarsiz konstruktor strukturani yaratish uchun ham foydalanishimiz mumkin, u kelishuv bo'yicha strukturada bo'ladi va chaqirilganda strukturaning maydonlariga kelishuv bo’yicha qiymat beriladi (masalan, sonli turlar uchun bu qiymat 0 ga teng):

User ali = new User();

tom.DisplayInfo(); // Name: Age: 0

Kelishuv bo’yicha konstruktordan foydalanishda struktura maydonlarini oshkor ravishda initsializatsiya qilish shart emas.
Shuningdek, biz o'zimizning konstruktorlarimizni aniqlay olamiz. Masalan, User strukturasini o'zgartiraylik:

struct User

{

public string name;



public int age;

public User(string name, int age)

{

this.name = name;



this.age = age;

}

public void DisplayInfo()



{

Console.WriteLine($"Name: {name} Age: {age}");

}

}
Shuni e'tiborga olish kerakki, agar strukturada konstruktor aniqlansa, unda u strukturaning barcha maydonlarini initsializatsiya qilishi kerak, yuqoridagi



misolda name va age o'zgaruvchilarining qiymatlari o'rnatiladi. Xuddi sinflardagi kabi, strukturani yaratish uchun initsializatordan foydalanish mumkin:

User person = new User { name = "Sanjar", age = 31 };

Ammo sinfdan farqli o'laroq, strukturani e'lon qilishda ularni maydonlarini to'g'ridan-to'g'ri initsializatsiya qilib bo’lmaydi, masalan:
struct User

{

public string name = "Sanjar"; // ! Xatolik



public int age = 23; // ! Xatolik

public void DisplayInfo()

{

Console.WriteLine($"Name: {name} Age: {age}");



}

}

Sinflar bilan bir qatorda C# da strukturalar shaxsiy ma'lumotlar turlarini yaratishning yana bir usuli hisoblanadi. Ko'pgina oʻzgaruvchi turlari, masalan, int, double va boshqalar strukturalardir.


Misol uchun, insonni ifodalovchi strukturani koʻramiz:

человека:


struct User

{

public string name;



public int age;

public void DisplayInfo()

{

Console.WriteLine("Ism: {0} Age: {1}", name, age);



}

}
Sinflar singari, strukturalar qiymatni o'zgaruvchilar orqali saqlashi va metodlar orqali amallar bajarishi mumkin. Yuqorida berilgan misolda ikki o'zgaruvchi inson nomini va yoshini saqlash uchun, DisplayInfo metodi esa ularni ekranga chiqarish uchun xizmat qiladi.


Ushbu strukturadan dasturda foydalanamiz:
using System;
namespace HelloApp

{

struct User



{

public string name;

public int age;

public void DisplayInfo()

{

Console.WriteLine("Ism: {0} Age: {1}", name, age);



}

}

class Program



{

static void Main(string[] args)

{

User tom;



tom.name = "Tom";

tom.age = 34;

tom.DisplayInfo();
Console.ReadKey();

}

}



}

Bilamizki, Sinflar ko’rsatkich hisoblanadi. Bu shuni anglatadiki, sinflarning namunalariga faqat ko’rsatkich (havola) orqali kirish mumkin. C# da sinflarga o'xshash berilganlar turi aniqlangan, ammo sinflardan farqli o'laroq, bu o'lchovli turdir. (размерный тип). Ushbu tur strukturadir.

Struktura o'lchovli tur bo'lganligi sababli, struktura namunasi elementlarning qiymatini saqlaydi, ularga havolalar emas va ular stekda joylashgan bo'lad, iuyumda emas. Shu sababli, struktura voris ierarxiyasida ishtirok eta olmaydi, faqat interfeyslarni amalga oshirishi mumkin.

Bundan tashqari, tuzilishga quyidagilar taqiqlanadi:



  1. kelishuv bo'yicha konstruktorni aniqlash, chunki u oshkor aniqlanmagan va uning barcha elementlariga kelishuv bo’yicha qiymatlarni beradi (tegishli turdagi nollar);

  2. destruktorni aniqlash, chunki uning ma'nosi yo'q.

Struktura sintaksisi quyidagicha:

[atributlar] [specifikatorlar] struct struktura_nomi [: interfeyslar]

{

struktura_tanasi



}
Struktura spetsifikatorlari xuddi sinf spetsifikatorlari kabi bir xil ma'noga ega. Biroq, kirish xususiyatlaridan faqat public, internal va shuningdek, ichma-ich joylashgan strukturalar uchun private spetsifikatoridan foydalanishga ruxsat beriladi.

Bundan tashqari, strukturalar abstrakt bo'lishi mumkin emas, chunki ulardan kelishuv bo'yicha voris olib bo’lmaydi.

Struktura tomonidan amalga oshirilgan interfeyslar vergul bilan ajratiladi.

Stuktura tanasi tarkibiga quyidagilar kirishi mumkin: konstantalar, maydonlar, konstruktorlar, metodlar, xossalar, indeksatorlar, operatorli metodlar, ichma-ich turlar va hodisalar.

Strukturani aniqlashda faqat statik maydonlarga qiymat o'rnatish mumkin.
Qolgan maydonlarga kelishuv bo’yicha konstruktor yordamida o'lchamli turdagi maydonlar uchun 0 va ko’rsatkich turidagi maydonlar uchun null beriladi.

this parametric qiymat sifatida talqin etiladi, shuning uchun uni ko’rsatkich uchun ishlatish mumkin, lekin qiymat berish uchun qo’llab bo’lmaydi.

Strukturalar ierarxiyada ishtirok eta olmasligi sababli, uning a'zolari uchun protected va protected internal spetsifikatorlardan foydalanib bo’lmaydi. Struktura metodlari abstrakt va virtual bo'lishi mumkin emas. Va faqat object bazaviy sinfidan voris bo'lib o'tgan metodlargina qayta aniqlanishi mumkin.

Sinflar bilan bir qatorda, strukturalar C # da berilganlar turlarini yaratishning yana bir usulini taqdim etadi. Bundan tashqari, int, double va boshqa turlar kabi ko'plab primitiv turlar aslida struktulardir.

Masalan, shaxsni ifodalovchi strukturani aniqlaylik:

struct User

{

public string name;



public int age;

public void DisplayInfo()

{

Console.WriteLine($"Name: {name} Age: {age}");



}

}


Download 139,1 Kb.

Do'stlaringiz bilan baham:
1   ...   13   14   15   16   17   18   19   20   21




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish