C# Generic Sınıflar

İbrahim     5 Ağustos 2017     725     2    
Generic’ler tasarladığımız interface, class, metod veya parametrelerin belirli bir tip için değil de bir şablon yapısına uyan her tip için çalışmasın olanak sağlayan bir yapıdır.
Generic’ler.Net 2.0 ile birlikte kullanıma sunulmuştur.

 

Generic’lerin bize sağladığı avantajlar

-Kod tekrarını önler.
-Kaliteli ve daha yönetilebilir kod yazmamıza olanak sağlar.
-Çalışma zamanında (run time) gereksiz Cast ve Boxing-Unboxing kullanmasını önlediğinden efektif performans sağlar.
-Derleme zamanında (compile time) (type safe) tip güvenli değişken kullanılmasını zorlayarak çalışma zamanında oluşabilecek tip dönüşüm hatalarını önler.
-Programcıya kod üzerinde daha güçlü esnek bir kontrol sağlar.

 

ÖRNEK :

İlk olarak BaseEntity sınıfımızı oluşturuyoruz.Her sınıfta Id yazmak yerine BaseEntitiy'de bir defa yazıyoruz ve diğer sınıflarda kalıtım olarak alıyoruz.Böylece kod kalabalığından kurtuluyoruz.

    public class BaseEntity
    {
        [Key]
        public int Id { get; set; }
    }

 

Araba ve Musteri sınıflarımızı oluşturuyoruz.

public class Araba: BaseEntity
    {
        public string Marka { get; set; }

        public string Seri { get; set; }

        public string Model { get; set; }

        public string Yil { get; set; }

        public string YakitTuru { get; set; }

        public string Vites { get; set; }

        public string MotorGucu { get; set; }

        public string Cekis { get; set; }

        public string Renk { get; set; }

        public float GunlukUcret { get; set; }

        public DateTime? SigortaBitisTarihi { get; set; }

        public DateTime? KaskoBitisTarihi { get; set; }

        public DateTime? EmisyonBitisTarihi { get; set; }

        public string Plaka { get; set; }

        public DateTime KayitTarihi { get; set; }
    }

 

 public class Musteri : BaseEntity
    {
        public string Ad { get; set; }

        public string Soyad { get; set; }

        public string Tel { get; set; }

        public string Adres { get; set; }

        public string Mail { get; set; }

        public bool Cinsiyet { get; set; }

        public DateTime DogumTarihi { get; set; }

        public string Tc { get; set; }

        public string EhliyetNo { get; set; }

        public string EhliyetTip { get; set; }

        public DateTime E_VerilisTarihi { get; set; }

        public float Borc { get; set; }

        public DateTime KayitTarihi { get; set; }

        public string Seri { get; set; }

        public string SeriNo { get; set; }
    }

 

Şimdi geldik asıl konuya..Generic sınıfımızı oluşturuyoruz.(Context sınıfını burada yazmadım.Bizim için önemli olan kısım generic sınıfımız)

    public class Generic<T> where T : BaseEntity
    {
        private Context context = new Context();
        public List<T> Veriler()
        {
            return context.Set<T>().ToList();
        }

        public void Insert(T entity)
        {
            context.Set<T>().Add(entity);
            context.SaveChanges();
        }
    }

 

Sınıflarımızı oluşturduktan sonra geriye kaldı veri ekleme ve veri çekme işlemi.

Formumuza çift tıklayarak load eventine şu kodları ekliyoruz(Ben burada Araba tablosundaki verileri çekiyorum.) :

 var gnric = new Generic<Araba>();
 dataGridView1.DataSource = gnric.Veriler();

 

Şimdi de ekleme işlemi yapalım.İlk olarak Araba ekleme işlemi yapalım.

 var gnric = new Generic<Araba>();
 var araba = new Araba()
 {
     Cekis = "2x2",
     EmisyonBitisTarihi = null,
     GunlukUcret = 100,
     KaskoBitisTarihi = null,
     KayitTarihi = DateTime.Now,
     Marka = "Renault",
     Model = "R9",
     MotorGucu = "45x2",
     Plaka = "09 KY 5748",
     Renk = "Mor",
     Seri = "123243234",
     SigortaBitisTarihi = null,
     Vites = "4",
     YakitTuru = "Benzin",
     Yil = "1980"
 };
 gnric.Insert(araba);

 

Müşteri ekleme işlemi yapalım.

 var gnric = new Generic<Musteri>();
 var musteri = new Musteri()
 {
     Ad = "asd",
     Adres = "asd",
     Borc = 1,
     Cinsiyet = false,
     DogumTarihi = DateTime.Now,
     EhliyetNo = "123",
     EhliyetTip = "a",
     E_VerilisTarihi = DateTime.Now,
     KayitTarihi = DateTime.Now,
     Mail = "asd",
     Seri = "123",
     SeriNo = "123",
     Soyad = "asd",
     Tc = "23213212313",
     Tel = "31231234123"
 };
 gnric.Insert(musteri);

 

Görüldüğü gibi Araba ve Musteri classları için ayrı ayrı iki adet class oluşturup, o sınıflarda ekle, sil, güncelle vs metodu yazmak için uğraşmıyoruz.Sadece bir defa yazıyoruz ve tüm classlar için bu yazdığımız generic sınıfımız iş görür hale geliyor.Generic sınıfımız olduğuna göre, artık yeni sınıflar eklemiş olsakta, bunlar için tekrar ekle sil güncelle metodları yazmamıza gerek kalmayacak.


Etiketler:  
csharp
generic-sinif-olusturma
generic-method


Paylaş:  

Bir Cevap Yazın

S

Softdestek 5 Ağustos 2017
Örnek projenin linki de olsa çok iyi olurdu...Teşekkürler.

İbrahim Çakal 11 Eylül 2017
Rica ederim :) Proje linkini koymaya gerek duymadım açıkcası ama boş bir zamanımda paylaşımın altına linkini koyarım o zaman.