C# - da property anlayışı
Published: 2023-08-06 11:10:47

Obyekt yönümlü proqramlaşdırma dillərində mövcud olan property anlayışı C# dilində də sıx istifadə olunmaqdadır. Property nə üçün istifadə olunur qısa bir nümunə üzərindən araşdıraq.

Təsəvvür edək ki, bizim Human adlı bir klasımız var. Sadəlik üçün bu klasın sadəcə bir global dəyişəni var ki, bu dəyişən Human klasının yaş məlumatın özündə əks etdirir.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ngdrm5qhmj4g4013u9cz.PNG)

Bu klası proqramın ana metodu olan Main metodunda istifadə edək.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g6st6cm1xp291ybv463j.PNG)

Yuxarıdakı şəkildən də göründüyü kimi Main metodunda Human klasımızın instance-ın yaratdıq və bu instance vasitəsi ilə Human klasındakı public olan dəyişənləri görə bildik. Burada Human klasın adı, h dəyişəni Human klasın instance-ı, Age isə Human klasın public dəyişənidir. Sadəlik üçün alqoritmik hesablamaları və məlumat bazası (database) bağlantılarının üzərindən keçək və təsəvvür edək ki, daxil etdiyimiz yaş (28) məlumat bazasına yazılır. Bura qədər hər şey aydındır. 

İndi isə gəlin təsəvvür edək ki, istifadəçi tərəfindən daxil edilən yaş -1 kimidir. O zaman bizim proqramımız h.Age məlumatını mənfi ədəd kimi alacaq və məlumat bazasına -1 yazılacaq. Bu da proqramın başqa proseslərini zədələyəcək. Məsələn, yaşla əlaqədar bir layihə düşünün və təqaüdün hesablanması zamanı yaşdan istifadə olunur və təqaüd məbləği hesablanarkən yekun cavabda mənfi ədəd alınır. Bu kimi halın qarşısını almaq üçün təbii olaraq biz if operatorundan istifadə edə bilərik. Məsələn:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cgwn9c3qhgdsmamadg0q.PNG)

Əgər təsəvvür etsək ki, proqramımızda Human klasının Age dəyişənininə bir çox yerdə yaş məlumatı yazırıq, o zaman biz gərək hər dəfə yaş məlumatını yazmamışdan öncə if şərt operatorunu yazaq. Qısası bu üsul optimal üsul sayılmaz. Bu problemin həll olunmasında property anlayışı yardımımıza gəlir. Bunun üçün Human klasımızda Age dəyişəninin adını property-dən fərqləndirmək üçün age olaraq dəyişirik və public bağlantı göstəricisini private olaraq dəyişirik. Əlavə olaraq da property yaradırıq.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m9mweyfq7jqy685hgelb.PNG)

Burada age dəyişən, Age isə property adlanır. 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/siz42kvr20cvjpexss88.PNG)

Artıq Main metodunda yaş məlumatı daxil edərkən if şərt operatoruna ehtiyac qalmadı. Bu şərti biz property daxilində set funksiyası zamanı edirik. Set funksiyası daxilindəki value parametri istifadəçi tərəfindən daxil edilən yaş məlumatıdır. Yekun olaraq biz age dəyişənimizi private edərək onu Human klasından başqa proqramın bütün hissələri üçün bağladıq. Bunun əvəzinə age dəyişəninə məlumat yazmaq və məlumat oxumaq üçün Age property-si yaratdıq. Bu property daxilində bir dəfə if şərt operatorunu yazmaqla bütün proqramda kod qısalmasına səbəb olduq. 9 dəfə yaş məlumatını yazmağımıza rəğmən, property vasitəsi ilə bir if şərt operatorundan istifadə etdik. Bu cür bağlanma, yəni ki, dəyişənin public-dən private-a keçməsi obyekt yönlü proqramlaşdırmada kapsülləmə (Encapsulation) adlanır.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0wbgwt0ch2zk9k14qbre.PNG)

Indi isə təsəvvür edək ki, Human class-ımızda əlavə olaraq Temperature dəyişəni var və bu dəyişən həm mənfi, həm də mübət qiymət ala bilər, dolayısı ilə heç bir şərt operatoruna ehtiyacımız yoxdur. Bu durumda artıq propety və public dəyişəni qısa formada aşağıdakı kimi yaza bilərik.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0hfgxnhcj0qgm5j68lw2.PNG)