CodeGym /Kurslar /C# SELF /Giriş modifikatorları və görünürlük sahəsi

Giriş modifikatorları və görünürlük sahəsi

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

1. C#-da əsas giriş modifikatorları

Proqram yazanda çox vaxt dəqiq bilmək istəyirsən ki, kim və haradan sənin dəyişənlərini görə və ya dəyişə bilər, metodları çağıra bilər. Bu, çoxmənzilli binadakı kimi bir şeydir: bütün otaqlar hamı üçün açıq deyil. Bəzilərinə yalnız sakinlər, bəzilərinə isə texniki işçilər girə bilər.

Proqramlaşdırmada bu "girişə nəzarət" giriş modifikatorları ilə həll olunur. Onlar müəyyən edir ki, sinifin üzvü (dəyişən, field, metod, property və s.) sinifdən kənarda, başqa sinifdə, başqa layihədə görünür, ya yox. Bu, OOP-də inkapsulyasiyanın əsas tətbiqlərindən biridir: biz reallaşdırma detallarını gizlədirik, yalnız lazım olan "interfeysləri" çölə veririk.

Burada əsas modifikatorlar və onların qısa təsviri olan cədvəl var:

Modifikator Harada görünür? (sadə dillə)
public
Hər yerdə (layihə daxilində və xaricində — əgər assembly əlavə olunubsa)
private
Yalnız həmin sinifin içində
(modifikator yoxdur)
private ilə eynidir

Qorxulu görünür? Əslində heç bir çətinlik yoxdur. Gəlin nümunələrlə baxaq, hansını harada istifadə etmək yaxşıdır.

2. public modifikatoru — kim istəyir gəlsin

public modifikatoru sənin dəyişənini və ya metodunu hər yerdə görünən edir. Əgər sinif üzvünü public elan etmisənsə, sənin sinifini görən istənilən başqa kod ona müraciət edə bilər.

public class Person
{
    public string Name;
    public void SayHello()
    {
        Console.WriteLine($"Salam! Mənim adım {Name}");
    }
}
public field və metod olan sinif nümunəsi

İndi istənilən yerdə (eyni layihədə və ya başqa layihədə, əgər assembly əlavə olunubsa) belə yaza bilərsən:

Person p = new Person();
p.Name = "Alisa";
p.SayHello();

Praktik məsləhət: hər şeyi public etmə — bu, kodunun təhlükəsizliyinə zərərdir.

3. private modifikatoru — bu şəxsi əmlakdır!

private modifikatoru sinifin içindəkiləri gizlədir: çöldən heç kim nə olduğunu görməyəcək və məlumatı dəyişə bilməyəcək. C#-da default olaraq bütün field və metodlar — private-dir, əgər başqa modifikator yazmamısan.

public class Cup
{
    private double volume; // Bu field-ı yalnız Cup sinfi görür

    public void Fill(double value)
    {
        volume = value; // Sinifin içində istifadə etmək olar
    }

    public double GetVolume()
    {
        return volume; // Amma çöldən heç kim volume-un olduğunu bilmir
    }
}
private field istifadəsi nümunəsi

Burada volume hamıdan gizlədilib, amma Cup sinfinin istənilən metodu onu istifadə edə bilər. Həcmi öyrənmək üçün public metod GetVolume() veririk.

4. Görünürlük sahəsi: dəyişənlər, metodlar və siniflər

Görünürlük sahəsi — proqramda sənin adının (dəyişən, metod, sinif) mənası və əlçatan olduğu zonadır.

  • Lokal dəyişənlər (metodun və ya kod blokunun içində elan olunubsa): yalnız həmin metodda və ya blokda görünür.
  • Metod parametrləri: yalnız metodun içində görünür.
  • Sinif field-ları: sinif daxilində hər yerdə görünür (giriş modifikatorundan asılı olaraq).
  • Siniflər: nested sinif yalnız wrapper sinifdə görünür, əgər o privatedirsə və s.

Görünürlük sahəsi ilə bağlı nümunəyə baxaq:

public class Counter
{
    private int count = 0; // sinifdə hər yerdə görünür

    public void Increment()
    {
        count++;   // field istifadə edə bilərik
        int temp = count * 2; // temp yalnız Increment-da görünür
    }

    public int GetCount()
    {
        // temp burada görünmür!
        return count;
    }
}
Dəyişənlərin görünürlük sahəsi nümunəsi

Əgər temp-ə GetCount()-da müraciət etməyə çalışsan — error alacaqsan.

5. Dəyişənlərin kölgələnməsi (shadowing)

Kölgələnmə — bu, bir sahədə (scope) dəyişən (və ya parametr) elə bir adla elan olunur ki, xarici sahədə də eyni ad var. Bu blokun içində “yeni” ad kölgələyir köhnəni və xarici dəyərə birbaşa müraciət etmək olmur.

Kölgələnmə nümunəsi:

class ShadowDemo
{
    int value = 10; // sinif field-ı

    void PrintValue()
    {
        Console.WriteLine(value);      // 10 — sinif field-ı
        int value = 5; // lokal dəyişən sinif field-ını kölgələyir
        Console.WriteLine(value); // 5 çıxacaq, 10 yox
    }
}
Dəyişənin kölgələnməsi (shadowing) nümunəsi

Bu nümunədə, int value = 5; yazanda, bu sinif field-ını kölgələyir və metodun içində həmin adla lokal dəyişən işləyir. value-ya PrintValue()-da müraciət edəndə, lokal dəyişən istifadə olunacaq, sinif field-ı yox.

Əgər yenə də sinif field-ına müraciət etmək lazımdırsa, this açar sözündən istifadə olunur:

class ShadowDemo
{
    int value = 10;

    void PrintValue()
    {
        Console.WriteLine(value);      // 10 — sinif field-ı
        int value = 5;
        Console.WriteLine(value);      // 5 — lokal dəyişən
        Console.WriteLine(this.value); // 10 — sinif field-ı
    }
}
Kölgələnmə zamanı sinif field-ına müraciət üçün this istifadəsi

Kölgələnmə çaşdırıcı ola bilər, ona görə dəyişənlərə mənalı, fərqli adlar vermək məsləhətdir — xüsusilə böyük komandada işləyirsənsə.

2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
Dəyişənlərin görünüş sahəsi ilə işləmək
Dəyişənlərin görünüş sahəsi ilə işləmək
2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
Dəyişənlərin kölgələnməsi
Dəyişənlərin kölgələnməsi
1
Sorğu/viktorina
, səviyyə, dərs
Əlçatan deyil
Funksiyalar
Funksiyalara giriş
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION