CodeGym /Kurslar /C# SELF /Sinifin elan sintaksisi və onun strukturu

Sinifin elan sintaksisi və onun strukturu

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

1. Sinifin elanının ümumi strukturu

Belə təsəvvür et: C#-da sinif — binanın çertyoju kimidir. Çertyojda biz təsvir edirik, neçə otaq var, divarların rəngi nədir, qapılar və pəncərələr haradadır. Sinifdə isə — obyektin hansı property-ləri var (məsələn, ad, yaş) və o nə edə bilir (məsələn, "salamlaşmaq", "maaş istəmək").

Sinifin elanı həmişə üç əsas blokdan ibarətdir:

  1. Access modifier (public, private, internal, protected) — bu sinifdən kim istifadə edə bilər. Sadəlik üçün indi public istifadə edəcəyik ki, sinif "hər yerdə görünən" olsun.
  2. class açar sözü — compiler başa düşsün ki, biz həqiqətən sinif təsvir edirik.
  3. SinifinAdi — böyük hərflə, konvensiyaya görə.
  4. Sinifin bədəni curly bracket-lərdə — burada sinifimizin bütün field, property, method-larını yazırıq.

Sxematik olaraq bu belə görünür:

public class SinifinAdi
{
    // Burada sinifin field, property və method-ları olacaq
}
C#-da sinifin elanı

Nümunə: Student sinifi

public class Student
{
    // Field-lar (obyektə aid dəyişənlər)
    public string Name;
    public int Age;
}

Hələlik bu sinif — boş qutu kimidir: biz təsvir etdik ki, student-in adı və yaşı olmalıdır, amma onu heç nəyə öyrətməmişik.

2. Sinifin field-ları (fields)

Field-lar — obyektə aid dəyişənlərdir. Məsələn, hər student-in öz adı və yaşı olmalıdır — ona görə də onlar field kimi yazılır:

public class Student
{
    public string Name;
    public int Age;
}

İndi, əgər sən Student tipində obyekt yaratsan, hər obyektin öz adı və yaşı olacaq.

Obyektin yaradılması nümunəsi:

Student sasha = new Student();
sasha.Name = "Sasha";
sasha.Age = 20;

Burada biz sasha obyektini yaratdıq, sonra isə ayrıca onun field-larına dəyər verdik. Bu üsul ən sadə start üçün istifadə olunur (constructor-lar barədə növbəti dərsdə ətraflı danışacağıq).

3. Sinifin method-ları (functions)

Method-lar — obyektin "fel"ləri, yəni onun davranışı. Obyektin edə bildiyi hərəkətlər. Məsələn, student salamlaşa bilər. Bunun üçün sinifin içində method yazılır:

public class Student
{
    public string Name;
    public int Age;

    public void SayHello()
    {
        Console.WriteLine($"Salam, mənim adım {Name}, mənim {Age} yaşım var!");
    }
}

İndi hər student "salamlaşa" bilər — özü də öz adı və yaşı ilə.

Method-un istifadəsi nümunəsi:

Student sasha = new Student();
sasha.Name = "Sasha";
sasha.Age = 20;
sasha.SayHello(); // Çap edəcək: Salam, mənim adım Sasha, mənim 20 yaşım var!

4. Sinifin property-ləri (properties)

Property-lər — "ağıllı" field-lardır, hansılara ki, dəyər oxuyanda və ya yazanda xüsusi hərəkət vermək olar. Müasir C#-da property-lər field-lardan daha çox istifadə olunur, çünki onlar daha çox nəzarət və çeviklik verir. Bu, elektrik kimidir: sadə görünür, amma imkanları çoxdur.


public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Sinifin property-lərinin elanı

Burada get; set; avtomatik field yaradır, amma gələcəkdə dəyər dəyişəndə əlavə məntiq əlavə etməyə imkan verir. Sinif istifadəçisi üçün property-lər field-lar kimi görünür.

Nümunə:

Student katya = new Student();
katya.Name = "Katya";
katya.Age = 18;
Console.WriteLine(katya.Name); // Katya

Property-lər barədə daha ətraflı — növbəti dərslərdə :P

5. Şərhlər

Darixdirici, amma vacib mövzu! Kodun qalan hissəsində olduğu kimi, sinifin içində də şərh yazmaq lazımdır ki, hansı field və ya method nə üçündür, izah edəsən:

public class Student
{
    // Student-in adı
    public string Name { get; set; }
    
    // Student-in yaşı (ildə)
    public int Age { get; set; }

    // Student salamlaşır
    public void SayHello()
    {
        Console.WriteLine($"Salam, mənim adım {Name}, mənim {Age} yaşım var!");
    }
}

Bu, oxunaqlılığı artırır və hətta böyük layihədə belə itməkdən qoruyur.

6. Access modifier-lər

Access modifier-lər — demək olar ki, müxtəlif kilidli qapılar kimidir. Onlar müəyyən edir ki, sinifin üzvlərinə kim və haradan müraciət edə bilər. Əsas modifier-lər:

  • public: hər yerdə əlçatandır (bizim default variant).
  • private: yalnız bu sinifin içində əlçatandır.
  • internal: cari assembly daxilində əlçatandır (layihələr, kitabxanalar).
  • protected: sinifin və onun mirasçıları daxilində əlçatandır.

Xarici dünyadan gizlədilmiş field üçün nümunə:

public class Student
{
    private int age; // Yalnız Student-in içində
    public string Name { get; set; }

    public void SetAge(int value)
    {
        if (value > 0)
            age = value;
    }

    public int GetAge()
    {
        return age;
    }
}

İlk mərhələlərdə tez-tez bütün üzvləri public elan edirlər ki, qarışmasın, amma real layihələrdə bu pis praktikadır: bəzi implementasiya detalları gizli qalmalıdır.

7. Sinifin static member-ləri

Bəzən sinifdə elə data və ya method-lar olur ki, onlar ayrıca obyektə yox, bütün sinifə aiddir. Bunlar — static member-lərdir (static members).

Məsələn: biz ümumi student sayğacı aparmaq istəyirik.

public class Student
{
    public static int StudentsCount = 0;

    public string Name { get; set; }
    public int Age { get; set; }
}

Static member-ə sinifin adı ilə müraciət olunur:

Student.StudentsCount = 0;

Hər obyektin öz property/field-ları var, amma static-lər — hamı üçün ortaqdır. Yuxarıdakı nümunədə, əgər 10 student varsa, hərəsinin öz Name-i var, amma StudentsCount — hamı üçün birdir.

8. Nümunə: Tam student sinifi (method-lu versiya)

Gəlin hər şeyi birləşdirək və hər şeyi bacaran, düzgün yazılmış student sinifi yaradaq:

public class Student
{
    // Student-lərin static sayğacı - bütün student-lərə aiddir
    public static int Count = 0;

    // Ad və yaş - property-lər
    public string Name { get; set; }
    public int Age { get; set; }

    // Constructor (constructor-lar barədə — növbəti dərsdə)
    public Student(string name, int age)
    {
        Name = name;
        Age = age;
        Count++; // Hər obyekt yaradanda sayğacı artırırıq
    }

    // Salamlaşma method-u
    public void SayHello()
    {
        Console.WriteLine($"Salam! Mən {Name}. Mənim {Age} yaşım var.");
    }
}

Əsas proqramda istifadə:

class Program
{
    static void Main()
    {
        Student sasha = new Student("Sasha", 20);
        Student katya = new Student("Katya", 22);

        sasha.SayHello();
        katya.SayHello();

        Console.WriteLine($"Ümumi student sayı: {Student.Count}");
    }
}

9. Kodun təşkili: bir fayl = bir sinif

.NET-də hər public sinifi ayrıca faylda saxlamaq adətdir, faylın adı sinifin adı ilə eyni olur. Məsələn:

Student.cs
|
|__ public class Student

Əsas proqram faylında (Program.cs) isə — giriş nöqtəsi və əsas kod olur. Bu, layihədə naviqasiyanı asanlaşdırır, xüsusən də siniflər çox olanda.

10. Sinif və obyektlərlə işləyərkən tipik səhvlər

Səhv №1: curly bracket-ləri unutmaq və ya səhv yerdə yazmaq.
Compiler dərhal error verəcək, amma həmişə aydın olmur ki, problem nədədir. Xüsusilə uzun konstruktorlarda bracket-lər "qaçanda" tapmaq çətin olur.

Səhv №2: eyni namespace-də iki sinifi eyni adla elan etmək.
Belə "yaradıcılıq" compiler-ə xoş gəlməyəcək. Yaxşı ki, belədir — yoxsa özün də başa düşməzsən, hansı sinifə müraciət edirsən.

Səhv №3: field-ə property ilə eyni ad vermək.
Bu, sinifin üzvlərinə müraciət edəndə qarışıqlıq yaradır. Hətta təcrübəli developer-lər bəzən başını tutur: "Mən field-ə müraciət edirəm, yoxsa property-yə?"

Səhv №4: access modifier yazmamaq.
Default olaraq sinif internal olur və əgər sən kitabxana yazırsansa — bu, kənardan sinifə girişə gözlənilmədən məhdudiyyət qoya bilər.

Səhv №5: static member-lərə instance ilə müraciət etmək.
Əgər student.Count əvəzinə Student.Count yazmasan, compiler bəlkə də icazə verəcək, amma bu, çaşdırıcıdır. Sən elə bil deyirsən ki, Count konkret student-ə aiddir, amma əslində — hamıya aiddir.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION