genericler-praktikada

Genericlər praktikada

Bu məqaləmizdə C# dilinin 2.0 versiyasında əlavə olunan Generic-lərdən və öz praktikamda hansı hallarda custom genericlər istifadə etməyimdən danışacağıq.

Aşağıdakı sualları cavablayaraq bu mövzu haqqında detallı məlumat almağa çalışaq:

1.Niyə görə Genericlər var?

2.Boxing-unboxing nədir və nə problem yaradır?

3. Problemin həlli

4. Custom Generic-lər praktikamda


Sual 1. Niyə görə Genericlər var?

Generic-lər (sinonim olaraq “Ümumiləşmələr”/ ”Ümumiləşdirmələr”) C# dilinin 2.0 versiyasında əlavə olunaraq type variation(tip variasiyası) prosesini təmin etmək yaradılıb. Type variation prosesi modulyar struktur qurmaq üçün istifadə olunan, tipdən asılı olmadan eyni bir prosesin yerinə yetirilməsini təmin edən mexanizmdir. Sadə formada desək , tiplər fərqli olsa da, onlar üzərində aparılan əməliyyatlar eyni olan zaman Generic-lərdən istifadə olunur.


2. Boxing-unboxing nədir və nə problem yaradır?

               Generic-lərə qədər C# dilində istifadə olunan massiv formaları əsasən System.Collections adsahəsində(namespace) yerləşdirdi. Array clasından əmələ gələn massivlər fixsə olunmuş(yəni dəqiq ölçüyə malik) olduğuna görə, onların dinamik şəkildə artıb azalan variantı olan System.Collections adsahəsindəki klaslardan istifadə olunurdu. Buradakı data strukturların minuslarından biri birbaşa object tipi ilə işləmələri idi. Belə ki, hansı tipdə məlumat olmasından asılı olmayaraq, həmin strukturlara məlumat əlavə edən zaman avtomatik boxing əməliyyatı baş verirdi.Boxing-stekdəki məlumatın heap-ə kopyalanması prosesidir. Məlumatı həmin konteynerdən geri alan zaman isə əksinə, unboxing əməliyyatı yerinə yetirildi. Unboxing-Heapdəki məlumatın stekdəki original tipinə geri qaytarılması prosesidir.

Düzdü, kiçik həmcli data-lar üçün bu ciddi bir problem təşkil etməsə də, massivdəki məlumatların sayının çox olması operativ yaddaşda ağır əməliyyatların yerinə yetirilməsinə gətirib çıxardı. Hər boxing-unboxing əməliyyatı zamanı stack-dəki məlumat heap-ə və oradan geriyə ötürülürdü.

Stack-dən heap-ə , oradan geriyə məlumatların köçülürməsi, köçürülmə zamanı məlumatın yalnız original tipə qaytarıla bilmə məsələləri kimi çətinliklər Genericlərin ortaya çıxmasına gətirib çıxartdı.


Sual 3. Problemin həlli

C# 2.0 versiyasında System.Collections.Generic adlanan adsahəsi yuxarıda sadalanan problemləri tamamilə həll edib. Artıq dinamik dəyişən massiv növlərinə məlumat yazan zaman boxing-unboxing prosesi və bunun doğurduğu original tipə qayıtma problemi yaranmır.

Bu namespace daxilindəki klaslar sadəcə fərqli data struktur olmaqla bənzəri məsələni həll etmək üçün-birdən artıq məlumat saxlamaq nəzərdə tutulub. Buradakı klasların bir-bir nə işə yarayacağını artıq izah etmirəm, internetdə bu haqda məlumat yetəri qədərdir. Mən bir başqa aspektə, praktikada genericlərin istifadəsinə yönələcəm. Növbəti məqalələrdən biri Microsoft praktikasında genericlərin istifadəsinə həsr olunacaq.


Sual 4. Custom Genericlər praktikamda

 Bu bölmədə məsələnin ən maraqlı hissəsinə, bir çox resurslarda tapa bilməyəcəyiniz “ Bəs mən nə zaman öz Generic tiplərimi,metodlarımı yaratmalıyam?” sualına cavab verməyə çalışacam. Yazacağım nümunələr real iş praktikasında qarşıma çıxan məsələlər və onların həllini saxlayır. Təbii ki, bütün halları əhatə etməyim inandırıcı olmazdı amma bu nümunələr sizdə Genericlər haqda tam fikir formalaşmasına kömək edəcək.


1.      EF Core praktikada istifadə edən zaman çox vaxt add və ya update edən eyni bir metodun olmasına ehtiyac duyarkən:

 


2.      Böyük proqram infrastrukturunu quran zaman konkret data konteynerdən izolyasiya olunmalı olan zaman(Repository p.) istifadə edərkən:

    

 3.Unif Of Work p.  istifadə edərkən:

 

   4. İki klası müqayisə apararkən:

 

  5.Proqramda loqlama məntiqi qurarkən:

  

 6.Dinamik şəkildə Order prosesini həyata keçirmək lazım olarkən:

 

 7.Asp.NET Core proyektlərimdən birində UserManager üçün Extension yazarkən:

 

 8.DDD istifadə edərək proqram infrastrukturu qurarkən:


  9. WPF-də command p. Istifadə edərkən

 

 

Gələn məqaləmizdə microsoft praktikasında genericlərin istifadəsinə baxacağıq.

Tural

Tural Süleymani

Süleymani Tural Microsoft-un MCSD statuslu mütəxəssisidir, 2008-ci ildən bu yana proqramlaşdırma üzrə tədris aparır

Müəllifin bu dildə ən son postları

Bu yazıları da bəyənə bilərsiniz