C# Konstruktor (Sinf/Class)

Biz bilgan oddiy metodlardan tashqari sinflarda konstruktor deb nomlangan maxsus metodlar ham qo'llaniladi. Berilgan sinfning yangi ob'ekti yaratilganda konstruktorlar chaqiriladi. Konstruktorlar obyektni initsializatsiya qilish uchun xizmat qiladi.

Kelishuv bo’yicha konstruktor

Agar sinfda hech qanday konstruktor aniqlanmagan bo'lsa, u holda bu sinf uchun avtomatik ravishda kelishuv bo'yicha konstruktor yaratiladi. Bunday konstruktorning parametrlari va tanasi yo'q.

Shaxs sinfi va bitta obyektini yaratamiz:

using System;
namespace UzbekDevs
{
  class Shaxs
  {
    public string name; // ismi
    public int age;   // yoshi

    public void GetInfo()
    {
      Console.WriteLine($"Ismi: {name} Yoshi: {age}");
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Shaxs bobur = new Shaxs();
      bobur.GetInfo();   // Ismi: Yoshi: 0
      bobur.name = "Bobur";
      bobur.age = 25;
      bobur.GetInfo(); // Ismi: bobur Yoshi: 25
      Console.ReadKey();
    }
  }

}

Shaxs obyekti yaratish uchun new Shaxs() iboradan foydalaning. new operatori Shaxs obyekti uchun xotira ajratadi. Va keyin hech qanday parametrlarga ega bo’lmagan kelishuv bo’yicha konstruktor chaqiriladi. Natijada, ushbu ifoda bajarilgandan so'ng, Shaxs obyektining barcha ma'lumotlarini saqlash uchun joy ajratiladi. bobur o'zgaruvchisi yaratilgan obyekt “havola”ga ega bo’ladi. 

Agar konstruktor obyekt o'zgaruvchilar qiymatlarini initsializatsiya qilmasa, u holda ular kelishuv bo’yicha qiymatlarga ega bo’ladi. Ya’ni, sonli turdagi o'zgaruvchilar 0 qiymatiga, satrlar va sinflar uchun esa bu null qiymatiga (ya'ni hech qanday qiymatga ega emas) teng.

Obyektni yaratgandan so'ng biz bobur o'zgaruvchisi orqali Shaxs ob'ektining o'zgaruvchilariga murojaat qilishimiz va ularning qiymatlarini o'rnatishimiz yoki olishimiz mumkin, masalan, bobur .name = “Bobur”;.

Ushbu dastur natijasi konsolda:

Ismi: Yoshi: 0 Ismi : Bobur Yoshi: 25

Konstruktorni yaratish

Yuqorida, obyektni initsializatsiya qilish uchun kelishuv bo’yicha konstruktor ishlatilgan. Biroq, biz o'z konstruktorlarimizni o'zimiz aniqlashimiz mumkin:

class Shaxs
  {
    public string name;
    public int age;
    public Shaxs()
    {
      name = "Bilmayman"; age = 25;
    } //1-konstruktor
    public Shaxs(string n) { name = n; age = 18; } //2-konstruktor
    public Shaxs(string n, int a) { name = n; age = a; } // 3-konstruktor
    public void GetInfo()
    {
      Console.WriteLine($"Ismi: {name} Yoshi: {age}");
    }
}

Endi sinf uchta konstruktorni aniqlaymiz, ularning har biri har xil parametrlarni qabul qiladi va sinf maydonlarining qiymatlarini belgilaydi. Biz ushbu konstruktorlardan foydalanamiz:

static void Main(string[] args)
    {
      {
        Shaxs bobur = new Shaxs()// 1-parametrsiz konstruktorni chaqirish
        Shaxs azamat = new Shaxs("Azamat")// 2-bitta parametrli konstruktorni chaqirish
        Shaxs jasur = new Shaxs("Jasur", 25); // 3-ikkita parametrli konstruktorni chaqirish 

        jasur.GetInfo();     // Ismi: Jasur Yoshi: 25
        bobur.GetInfo();    // Ismi: Bilmayman Yoshi: 25
        azamat.GetInfo();     // Ismi: Azamat Yoshi: 18
        Console.ReadKey();
      }
    }

Ushbu dasturning konsolga chiqishi:

Ismi: Jasur Yoshi: 25 Ismi: Bilmayman Yoshi: 25 Ismi: Azamat Yoshi: 18

Agar sinfda konstruktorlar aniqlangan bo'lsa, unda obyekt yaratishda ushbu konstruktorlardan biri ishlatilishi kerak.