C#-da açar sözlər(Keywords)|Part 1|Modifiers
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 readonly
ifadə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 :
new
aç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) new
olmayan 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 virtual
aç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 “ upcasting” adlanır.Bərabərlikdən sağa baxsaq, b
dəyişəninin özündə Subclass
referansı saxladığını görərik.Deməli,bu dəyişən Subclass
sinfi 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 və 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ə Subclass
sinfinin ö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 start
və stop
metodlarını doldurduq və stop
metoduna sealed açar sözünü əlavə etdik və GermanCar
sinfini 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!