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();
- 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:
- new Contact() ilə obyekt yaradırıq.
- Onun sahələrinə dəyər veririk.
- 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ə.
GO TO FULL VERSION