DEV Community

Cover image for C# İle Generic Sınıflara Giriş
hdemiray
hdemiray

Posted on

C# İle Generic Sınıflara Giriş

Generic sınıflar OOP programlama yaparken C# ta kurtarıcı bir özelliğe sahiptir. Bu yüzden genericleri çok iyi anlamamız gerekiyor.

Generic nedir ?

Örneklerle açıklamaya çalışayım.

Kurduğumuz bir CRUD operasyonlarını içeren yapıyı her nesne için tekrar tekrar yazmamak için onu bir tip kullanmaya zorlamadan generic bir yapı oluşturarak her nesnemize uyarlanabilir hale getireceğiz.

Customer sınıfımızı ve onun Crud operasyonlarını içeren DAL interface'i üzerinden gidelim.

  interface ICustomerDal  
  {
        List<Customer> GetAll();
        Customer Get(int id);
        void Add(Customer customer);
        void Update(Customer customer);
        void Delete(Customer customer);
  }
Enter fullscreen mode Exit fullscreen mode

ICustomerDal customer classı için crud operasyonlarının imzalarını tutan bir interface. b

Burada bir sıkıntımız yok ancak aynı işlemlere ihtiyaç duyan birden fazla sınıfımız olunca ve işlemler birbirine çok benzeyince;

  interface IProductDal  
  {
        List<Product> GetAll();
        Product Get(int id);
        void Add(Product product);
        void Update(Product product);
        void Delete(Product product);
  }
Enter fullscreen mode Exit fullscreen mode

Tip (customer,product) kısmını generic bir yapıyla halledebilirsek eğer bize çok faydası olacaktır.

Yeni bir interface oluşturuyorum ve ismini Irepository koyuyorum.

    interface IRepository<T>
    {
        List<T> GetAll();
        T Get(int id);
        void Add(T entity);
        void Update(T entity);
        void Delete(T entity);

    }
Enter fullscreen mode Exit fullscreen mode

Yeni interface'imizin içerisine aynı metodları koyuyorum. Bu sefer listelerde gördüğümüz tip belirme olayını interface'in isimlendirme kısmında görüyoruz.

Bunun anlamı ben implemente edildiğim yerden bir tip alacağım ve içerimde bulunan metod ve alanlarda bu T yerine ne geldiyse onları uygulayacağım.

Kullanım Şekli

Artık ICustomerDal ve IProductDal interfacelerimizi boş bırakıyoruz ve Irepository implementasyonu gerçekleştiriyoruz.

    interface ICustomerDal:IRepository<Customer>
    {
       
    }
    interface IProductDal:IRepository<Product>
    {
        
    }
Enter fullscreen mode Exit fullscreen mode

Görüldüğü gibi çalışacağımız tipi implemente ederken söylüyoruz ve kolayca uygulamış oluyoruz. Artık ortak operasyonları IRepository içerisine sadece product sınıfına veya customer sınıfına özel olan işleri ise onların interfaclerinde yazıyoruz ve aynı yapıyı daha az kod, daha sürdürülebilir bir yapı ile kurmuş oluyoruz.

Top comments (0)