C#-da açar sözlər(Keywords)|Part 1|Modifiers

Məhəmməd Sadıqzadə
Pragmatech
Published in
6 min readJul 27, 2021

Bu məqalədə spesifik bir mövzu barədə deyil də,budaqdan budağa tullanaraq müəyyən qədər açar sözlərə nəzər salacağıq.Təbii ki,bu yazacaqlarımdan daha çoxunu da tapa bilərsiniz.O zaman başlayaq :)

Açar söz nədir?

C#-da proqram çalışdırılarkən kodları redaktə edən(ing: compiler) üçün xüsusi anlam daşıyan ifadələr var.Açar sözləri dəyişənin adı,metodun adı,sinfin adı və s. kimi işlətmək olmur.

Təyinedici açar sözlər(Modifier Keywords)

abstract

Bir öncəki məqaləmdə mücərrədlikdən bəhs etmişdim.Bu açar söz sırf həmin o mücərrədlik üçündür.Bu açar sözü həm metodların,həm də siniflərin yanında işlətmək mümkündür. abstract açar sözü işlənən yerdə artıq miras alan bir sinifə ehtiyac duyulur və həmin sinifdə abstrakt metod mütləq doldurulmalıdır :

Daha ətraflı məlumat üçün məqaləmə baxa bilərsiniz.

const

const açar sözü ingilis dilində “constant” sözünün qısaltmasıdır və adından da göründüyü kimi sabit dəyişən təyin etmək üçün istifadə olunur.

const açar sözü ilə təyin olunan data statik sayılır( static const deyə əmr də mümkün ola bilməz),onu birbaşa siniflə çağırmaq mümkündür :

5

Bir müddət sonra dəyişə bilən datalar üçün const ilə yazılmaq doğru deyil.

readonly

readonly açar sözü ilə biz eyniylə const kimi dəyişilə bilməz dəyişənlər təyin edirik.Lakin bu açar sözlü dəyişənin dəyərini təyin olunduğu sinfin konstruktorunda da ötürmək və ya dəyişdirmək olar.

readonly ilə təyin olunan dəyişənconst-dan fərqli olaraq statik olmur.Yəni ki, static readonlyifadəsi mümkündür(Lakin elə dəyişəni yalnız statik konstruktorda dəyişmək mümkündür).Deməli,elə dəyişənlər obyekt ilə çağrılır :

readonly vasitəsilə ilə biz metod daxilində dəyişən təyin edə bilmərik,lakin const ilə bu mümkündür :

new

Bu açar sözün fərqli işlənmə istiqamətləri olsa da,əsasən siniflərin obyektini yaratmaq üçün istifadə edirik :

newaçar sözünün başqa bir işlənmə yeri də miras alınan sinifdəki üzvləri miras alan sinif vasitəsilə gizlətdikdə olur :

Bu misalda miras alınan sinifdə təyin olunmuş 2 metodu fərqli üsulla gizlətdik.Hər iki halda problem olmayacaq,lakin redaktor(ing: compiler) newolmayan halda bizə xəbərdarlıq edir.

virtual-override

Bu iki açar sözü bir-birindən ayırmaq olmaz,ona görə ,gəlin,ikisinə birlikdə göz ataq.virtual-override cütü iki sinif arasında baş verən miras alma zamanı işlənir.Əsas sinifdə təyin olunmuş bir metodu normalda miras alan sinif özünə görə yaza bilməz,amma virtualaçar sözü ilə təyin olunmuş metodu başqa bir sinif özünə görə dəyişdirib işlədə bilər :

Adios!

Yuxarıdakı kodumuzda “Main” metodu içində yazdığımız Base b = new Subclass(); proqramlaşdırmada “ upcastingadlanır.Bərabərlikdən sağa baxsaq, bdəyişəninin özündə Subclass referansı saxladığını görərik.Deməli,bu dəyişən Subclasssinfi daxilindəki üzvlərə çata biləcək.Bəs özəlliyi nə oldu bu əməliyyatın?

Bildiyiniz kimi miras alan bir sinif həm öz,həm də miras aldığı sinfin üzvlərinə malik olur.Bizim də təyin etdiyimiz b dəyişəni sadəcəSubclass içindəki miras almaqla gələn üzvlərə çatmaq üçündür.Miras alan sinfin içində yeni metod yaratsaq,bu dəyişən onu oxuya bilməyəcək,lakin miras alınmış sinifdəki metodu “override” etdikdə həmin dəyişən metodun dəyişilmiş halını çağıracaq,çünki yeni bir metod deyil,əsas sinifdən gələn bir metoddur.Bu üsulla new override arasındakı fərqi daha yaxşı anlamış oluruq,gəlin praktikada müqayisə edək :

Subclass!
Base!

Nəticədən də gördüyümüz kimi,biz mirasla gələn metodun adını yazarkən override açar sözünü işlətsək,var olan metodun üzərində dəyişiklik etmiş oluruq,hələ də Base sinfi tipində dəyişən onu öz metodu olaraq görür.Lakin new açar sözündən istifadə etsək,mirasdan gələn metoddan əlavə Subclasssinfinin özünə xas digər bir metod daha yaratmış oluruq.Loru dildə desək,özümüzdən Amerika açmış oluruq.Yəni,həm Base sinfinə məxsus ,həm də Subclass sinfinin özünə məxsus toplam iki metodumuz olmuş olur. b dəyişəni də gedib Base sinifindən gələn metodu çağırır.

partial

C# proqramlaşdırma dilində bir sinfin,interfeysin,strukturun,metodun tərkibini bir neçə hissəyə bölüb sonra da redaktor tərəfindən birləşdirilib “eyni dam altına yığılmasını” təmin etmək mümkündür.Bunun üçün bizə partial açar sözü lazım olur.Gəlin,aşağıdakı kodda bu açar sözün siniflə işlənilməsinə baxaq :

Yuxarıdakı kodda gördüyümüz kimi iki ayrı faylın içində eyni adda sinif yaratdıq.Əgər partial açar sözünü işlətməsək,eyni adda iki sinifin yaradılmasına görə xəta alardıq.Hər iki parçada bəzi sinif üzvləri yaratdıq və sonda bir obyekt yaradaraq iki ayrı parçadakı bütün üzvlərə çatmış olduq.Metodlarla işləndikdə isə,metodun imzası(mücərrəd metodların yazılması kimi) sinfin bir hissəsində,doldurulması isə digər hissəsində baş verir :

Adı :Məhəmməd
Soyadı : Sadıqzadə
Yaşı : 19
Boyu : 1.83
Çəkisi : 80

Partial bir metod yalnız partial sinif içində təyin oluna bilər.Bir metodu partial olaraq təyin edib içini boş buraxdıqda sinfin digər bir hissəsi tərəfindən doldurulması vacibdir.

sealed

Bu açar söz vasitəsiylə biz bir sinfin digər siniflərə miras verməsinə mane ola bilərik.Proyektimizdə sealed açar sözü ilə təyin olunmuş bir sinfi heç bir sinif miras ala bilməyəcək :

Əgər biz siniflərin miras alınmasına mane olmadan spesifik üzvlərin(metodların və “property”-lərin) dəyişdirilməsinə mane olmaq istəyiriksə,o zaman miras verən sinfin önündə sealed yazmayıb dəyişdirilməsini istəmədiyimiz üzvün önündə bu açar sözü işlədirik :

5 saniyəyə start oldu
6 saniyəyə stop oldu
3 saniyəyə start oldu
6 saniyəyə stop oldu

Burda GermanCar sinfində ilə miras aldığımız startstop metodlarını doldurduq və stopmetoduna sealed açar sözünü əlavə etdik və GermanCarsinfini miras alan siniflərin bu metodu dəyişdirməyinə mane olduq :

static

C# proqramlaşdırma dilində static açar sözü obyektə ehtiyac qalmadan əməliyyatları birbaşa görmək üçündür.Bu açar sözün əsasən işləndiyi yerlər aşağıdakı kimidir :

  • Sinifləri təyin edərkən
  • Dəyişənləri təyin edərkən
  • Metodları təyin edərkən
  • Konstruktorları təyin edərkən

Statik siniflər

Statik siniflər içində yalnız statik metodlar,dəyişənlər,konstruktorlar barındıra bilər.Statik sinfin obyektini yaratmaq mümkün deyil.Bu tip sinifləri başqa siniflər tərəfindən miras almaq mümkün deyil.

Statik dəyişənlər

Statik dəyişənlər sinfə məxsus olur.Yəni proqram çalışdırılarkən yaddaşda sinif yükləndikdə həmin dəyişənlər də yüklənir.Statik dəyişənlərə “Sinif dəyişənləri” də deyilir.Statik olmayan dəyişənlər isə obyekt yaradıldıqda yaddaşda yer tutur.Obyekti yaradıla bilən siniflər tərəfindən də obyekt vasitəsilə çağrıla bilməz.Bu tip dəyişənlərin üstünlüyü hər dəfə obyekt yaradıldıqca yaddaşda ayrı-ayrı obyektlərin daxilində saxlanılan dəyişənlərin əvəzinə 1 dəfə yaradılan,daima bir yerdə(sinfin özünə xas olaraq) qalan olmasıdır.

Statik metodlar

Yuxarıda dəyişənlər barədə dediyimizin eynisini metodlar barədə də deyə bilərik.Yuxarıda siniflə birlikdə yüklənmə-obyekt yaradıldıqda yüklənmə deyə ayrım etmişdik.Statik metodlar da yalnız statik dəyişənlərə çata bilər,çünki statik üzvlər yaddaşa yükləndikdə statik olmayan üzvlər hələ yaddaşda olmur :

Amma obyekti metod daxilində yaratsaq,artıq yadddaşda olmuş olacaq,ona görə də statik olmayan dəyişənə də çata biləcəyik :

Statik konstruktorlar

  • Statik konstruktorlar parametrli ola bilməz.
  • Bir sinfin yalnız bir statik konstruktoru ola bilər.
  • Statik konstruktorlar birbaşa çağrıla bilməz.
  • İlk dəfə obyekt yaradılanda və ya hansısa statik dəyişəni çağıranda konstruktor işə düşmüş olur
Statik konstruktor işə düşdü
Statik olmayan konstruktor işə düşdü
Statik olmayan konstruktor işə düşdü

Hansısa statik dəyişən çağrılanda da statik konstrukto işləyir demişdik.Gəlin,baxaq :

Statik konstruktor işə düşdü
Statik olmayan konstruktor işə düşdü

Bir sıra açar sözlərə toxunduq bu məqalədə,ümid edirəm,izah etməkdə uğurlu ola bildim,bu məqalənin davamı da olacaq yaxın zamanda,gözləmədə qalın,xudahafiz!

--

--