STRUKTURALAR
Sinflar bilan bir qatorda strukturalar C# da dasturchining o‘z ma'lumotlar turlarini yaratishning yana bir usulini taqdim etadi. Bundan tashqari, int, double va boshqalar kabi ko'plab primitiv turlar mohiyatan strukturadir.
Strukturani aniqlash
struct kalit so'zi strukturani aniqlash uchun ishlatiladi :
struct struktura_nomi
{
// struktura elementlari
}
struct so'zidan keyin strukturaning nomi keladi, so'ngra strukturaning elementlari - maydonlar, usullar va boshqalar figurali qavslar ichida joylashtiriladi.
Masalan, Person deb ataladigan va insonni ifodalovchi strukturani aniqlaymiz:
struct Person
{
}
Sinflar singari, strukturalar holatni maydonlar (o'zgaruvchilar) ko'rinishida saqlashi va usullar shaklida xatti-harakatlarni aniqlashi mumkin. Masalan, Person strukturasiga bir nechta maydon va usul qo'shamiz:
struct Person
{
public string name;
public int age;
public void Print()
{
Console.WriteLine($"Ism: {name} Yoshi: {age}");
}
}
Bunday holda, ikkita o'zgaruvchi aniqlanadi - mos ravishda Personning ismi va yoshini saqlash uchun name va age. Konsolga Person haqidagi ma'lumotlarni chiqarish uchun esa Print usuli yaratildi.
Xuddi sinflarda bo'lgani kabi, strukturaning funktsional imkoniyatlariga - maydonlar, usullar va strukturaning boshqa tarkibiy qismlariga murojaat qilish uchun nuqta belgisi qo'llaniladi - struktura ob'ektidan keyin nuqta qo'yiladi, so'ngra struktura komponenti ko'rsatiladi:
ob’ekt.struktura_maydoni
ob’ekt. struktura_metodi(metod_parametrlari)
Struktura ob'ektini yaratish
Konstruktor yordamida initsializatsiyalash
Strukturadan foydalanish uchun uni ishga tushirish kerak. Struktura ob'yektlarini yaratishni ishga tushirish uchun, sinflarda bo'lgani kabi, konstruktorga new operatori bilan chaqirishdan foydalaniladi. Struktura kodida hech qanday konstruktor aniqlanmagan bo'lsa ham, u kamida bitta konstruktorga ega - kompilyator tomonidan yaratilgan standart konstruktor. Ushbu konstruktor hech qanday parametrlarni olmaydi va standart qiymatlarga ega struktura ob'ektini yaratadi.
new struktura_nomi();
Masalan, standart konstruktor yordamida Person struct obyektini yaratamiz:
Person tom = new Person(); // konstruktorni chaqirish
// yoki
// Person tom = new();
tom.name = "Tom"; // name maydoni qiymatini o‘zgartiramiz
tom.Print(); // Ism: Tom Yoshi: 0
struct Person
{
public string name;
public int age;
public void Print()
{
Console.WriteLine($"Ism: {name} Yoshi: {age}");
}
}
Bunday holda, tom ob'ekti yaratiladi. Uni yaratish uchun standart konstruktor chaqiriladi, u o'z maydonlari uchun standart qiymatlarni o'rnatadi. Raqamli ma'lumotlar uchun bu qiymat 0 ga teng, shuning uchun maydon 0 ageqiymatiga ega bo'ladi. strings uchun nullbu qiymat hech qanday qiymatni bildirmaydi. Ammo keyin, agar maydonlar mavjud bo'lsa (va bu holda publicular mavjud modifikatorga ega bo'lganligi sababli), biz ularning qiymatlarini o'zgartirishimiz mumkin. Shunday qilib, bu erda maydonga name"Tom" qatori berilgan. Shunga ko'ra, usulni bajarishda Print()biz quyidagi konsol chiqishini olamiz:
Ism: Tom Yoshi: 0
Maydonni to'g'ridan-to'g'ri initsializatsiya qilish
Agar strukturaning barcha maydonlari mavjud bo'lsa (Person strukturasining umumiy o'zgartiruvchiga ega bo'lgan maydonlarida bo'lgani kabi ), u holda konstruktorni chaqirmasdan strukturani ishga tushirish mumkin. Bunday holda, siz maydon qiymatlarini olishdan va strukturaning usullarini chaqirishdan oldin strukturaning barcha maydonlariga qiymatlarni belgilashingiz kerak. Masalan:
Person tom; // konstruktor chaqirilmaydi
// maydon initsializatsiyasi
tom.name = "Sam";
tom.age = 37;
tom.Print(); // Ism: Sam Yoshi: 37
struct Person
{
public string name;
public int age;
public void Print()
{
Console.WriteLine($"Ism: {name} Yoshi: {age}");
}
}
Maydonni initsializatsiyalash
Shuni ta'kidlash kerakki, C# 10 dan boshlab, biz strukturaning maydonlarini aniqlashda to'g'ridan-to'g'ri initsializatsiyalash mumkin (C# 10 dan oldin bu mumkin emas edi):
Person tom = new Person();
tom.Print(); // Ism:Tom Yoshi: 1
struct Person
{
// C#10 dan boshlab maydonni initsializatsiyalash mumkin
public string name = "Tom";
public int age = 1;
public void Print() =>Console.WriteLine($"Ism: {name} Yoshi: {age}");
}
Biroq, bu holatda ham, standart qiymatlarga qaramasdan, agar biz ushbu qiymatlardan foydalanmoqchi bo'lsak, konstruktor chaqirilishi kerak.
Do'stlaringiz bilan baham: |