CodeGym /Kurslar /C# SELF /Obyektlərin new operatoru ilə yaradılması

Obyektlərin new operatoru ilə yaradılması

C# SELF
Səviyyə, Dərs
Mövcuddur

1. Obyekti düzgün necə yaratmaq olar

new operatoru C#-da elə bir sehrli düymədir ki, sxematik "çertyoj"u (bizim class) real bir instance-a (obyekt) çevirir və artıq onunla işləmək olur. Sadə desək: class müəyyən edir nə obyekt bacarır və hansı xüsusiyyətləri var, new isə bu obyekti kompüterin yaddaşında yaradır.

new operatoru olmadan bizim class-lar sadəcə çertyoj kimi qalardı: baxmaq, müzakirə etmək olar, amma nə tullanmaq, nə də alcantara kreslosuna çay tökmək mümkün deyil.

Əgər class — pizza reseptidirsə, new operatoru — həmin reseptlə pizza bişirən aşbazdır. Obyekt isə — onun işinin nəticəsidir: artıq qutuda olan və yeyilə bilən pizza.

Sintaksis

Gəlin baxaq, bu hər şeyə qadir new-dan necə istifadə edirik. Əgər bizdə Contact adlı class varsa, əsas sintaksis belədir:

Contact cont = new Contact();
new ilə obyektin yaradılması
  • Contact solda — yaratdığımız dəyişənin tipi.
  • cont — dəyişənin adı (mənalı ad seç, gələcəkdə debug zamanı əziyyət çəkmək istəmirsənsə).
  • new Contact() — new operatorunun çağırılması, hansı ki, Contact tipində obyekt yaradır.

Yaddaşda

Bu kod işləyəndə, əməliyyat sistemi yeni obyekt üçün yaddaşda bir hissə ayırır və həmin obyektin "yaşadığı" ünvana (referans) qaytarır. Bu referans cont dəyişənində saxlanılır.

Sxem

+------------------+             +--------------------+
|  dəyişən cont    | --------->  |   Contact Obyekti  |
+------------------+             +--------------------+
          |
          |       (ad, telefon, email və s. saxlayır)
          |
         ünvan

2. Kontakt obyektləri yaradırıq

Əvvəlki nümunələrdə belə bir class düşünmüşdük:

public class Contact
{
    public string Name;
    public string Phone;
    public string Email;
}

İndi isə Contact tipində yeni obyekt yaradaq:


Contact friend = new Contact();
friend.Name = "İvan İvanov";
friend.Phone = "+1-999-123-45-67";
friend.Email = "ivan@example.com";

Console.WriteLine($"Ad: {friend.Name}, Telefon: {friend.Phone}, Email: {friend.Email}");

Burada nə baş verir:

  1. new Contact() ilə obyekt yaradırıq.
  2. Onun sahələrinə dəyər veririk.
  3. Məlumatları ekrana çıxarırıq.

Nümunə 2:

Gəlin bir neçə kontaktla işləyək — daha bir obyekt yaradaq:

Contact boss = new Contact();
boss.Name = "Anastasiya Sergeyevna";
boss.Phone = "+1-888-765-43-21";
boss.Email = "nastya@company.com";

Console.WriteLine($"Boss: {boss.Name}, Telefon: {boss.Phone}");

Sənə tanışların anketini doldurmaq kimi gəlmir? Obyektlər də məhz belə işləyir: hər yaradılan instance öz unikal dəyərlərini alır və onları başqalarından ayrı saxlayır!

3. Obyekt massivindən istifadə

Əgər bir yox, iki yox, məsələn, on kontakt saxlamaq lazımdırsa, onları massivdə saxlamaq məntiqlidir:


Contact[] contacts = new Contact[3];           // 3 obyekt üçün massiv

contacts[0] = new Contact();
contacts[0].Name = "Denis";
contacts[0].Phone = "+7-911-111-22-33";

contacts[1] = new Contact();
contacts[1].Name = "Mariya";
contacts[1].Phone = "+7-915-123-45-67";

contacts[2] = new Contact();
contacts[2].Name = "Petr";
contacts[2].Phone = "+7-921-543-21-00";

// Hamısını ekrana çıxaraq
for (int i = 0; i < contacts.Length; i++)
{
    Console.WriteLine($"Kontakt {i+1}: {contacts[i].Name}, {contacts[i].Phone}");
}

Vacibdir: massivdəki hər element üçün new istifadə edirik! Sadəcə massivin yaradılması obyektləri yaratmır, sadəcə onlara referanslar üçün yer ayırır.

4. new operatoru və default dəyər

Bəzən belə sual çıxır — əgər mən sadəcə Contact tipində dəyişən elan etsəm, amma ona new ilə obyekt verməsəm, nə baş verəcək?


Contact someContact;
someContact.Name = "Xəta";    // Kompilyasiya xətası!

Əgər belə yazsan:

Contact someContact = null;

və someContact.Name-ə müraciət etsən, proqramın "yıxılacaq" və məşhur exception çıxacaq:

System.NullReferenceException: Obyektə referans instance göstərmir.

Belə hallardan qaçmaq üçün obyektləri istifadə etməzdən əvvəl həmişə new ilə initialize et.

5. Konstruktorun çağırılması

Sən new Contact() yazanda, həmin anda xüsusi bir metod — konstruktor çağırılır. Hal-hazırda bizim class-da açıq konstruktor yoxdur, ona görə də default konstruktor çağırılır, hansı ki, obyekt yaradır və bütün sahələri default dəyərlə doldurur (null referans tipləri üçün, 0 isə ədədi tiplər üçün).

Növbəti dərsdə sən öz konstruktorlarını necə yaradacağını öyrənəcəksən — məsələn, adı və telefonu dərhal ötürmək. Hələlik isə yalnız parametrsiz konstruktor işləyir.

Real həyatdan nümunələr

new operatoru ilə obyektlərlə işləmək hər bir C# proqramçısının gündəlik işidir. Təsəvvür elə:

  • Saytda istifadəçi yaradırsan — kodda yeni User obyekt yaranır.
  • Online mağazada sifariş açırsan — yeni Order yaranır.
  • Kitab haqqında məlumat daxil edirsən — yeni Book obyekt yaranır.

Müasir C# proqramlarında minlərlə sətrdə new operatoru görəcəksən.

Obyekt yaradılmamışdan əvvəl yaddaş


            Contact firstContact; // Dəyişən, amma heç nəyə işarə etmir
+--------------------------+
|   firstContact           |---->  null (heç nə!)
+--------------------------+

Obyekt yaradıldıqdan sonra


Contact firstContact = new Contact();
+--------------------------+                 +----------------------+
|   firstContact           |---------------->|   Contact Obyekti    |
+--------------------------+                 +----------------------+

6. Praktiki nümunə

Tutaq ki, istifadəçiyə klaviaturadan yeni kontaktlar yaratmağa icazə vermək istəyirik:


Console.WriteLine("Adı daxil edin:");
string name = Console.ReadLine();

Console.WriteLine("Telefonu daxil edin:");
string phone = Console.ReadLine();

Contact newContact = new Contact();
newContact.Name = name;
newContact.Phone = phone;

Console.WriteLine($"Saxlanıldı kontakt: {newContact.Name}, {newContact.Phone}");

İndi hər istifadəçi girişi yaddaşda öz unikal obyektini yaradacaq və onu saxlamaq, dəyişmək, ekrana çıxarmaq — istədiyin hər şeyi etmək olar!

7. Tipik səhvlər və gülməli tələlər

Səhv №1: obyektlə işləməyə başlamazdan əvvəl new çağırmağı unutmaq.
Dəyişəni elan edib, amma onu initialize etməsən, ya kompilyasiya xətası, ya da NullReferenceException alacaqsan. Bu klassikadır: obyekt elan etdin — əgər həqiqətən lazımdırsa, dərhal new ilə yarat.

Səhv №2: obyekt massivini yaratdın, amma obyektlərin özünü yaratmadın.
Tipik tələ: Contact[] tipində massiv yaradırsan, amma içində sadəcə null olur. contacts[0].Name-ə müraciət etmək proqramı yıxacaq. Əvvəlcə hər massiv elementini ayrıca initialize etmək lazımdır: contacts[i] = new Contact();.

Səhv №3: metodu property ilə səhv salmaq.
Bəzən yeni başlayanlar düşünür ki, metodu field kimi istifadə etmək olar: student.GetName yazırlar, əslində isə student.GetName() olmalıdır. Əgər nəticəni dərhal istifadə etməsən, işləyəcək — amma kompilyator "qışqıracaq" əgər "metodu" dəyər gözlənilən yerə qoysan. Həmişə yoxla: metod mütləq dəyirmi mötərizələrlə çağırılmalıdır, hətta parametr qəbul etməsə belə.

2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
`new` operatorundan istifadə edən sadə bir sinif
`new` operatorundan istifadə edən sadə bir sinif
2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
Obyektlər massivinin yaradılması
Obyektlər massivinin yaradılması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION