Generic Yapılar

Generic türlerde aynı zamanda class oluşturabilir ve bu class’larımdan çalşma zamanımda istediğim şekilde instance alarak istediğim gibi işlemler yapabilirim, örneğin;

Görüldüğü gibi tanımladığım class?dan generic türü olarak string türünde ve int türünde instance alabiliyorum. Böylece oluşturulan nesneye sadece tanımlandığı türde veri atabiliyorum.

Generic türde class tanımlandığı gibi interface, struct, delagate veya metotlarda generic türde tanımlanabilirler. Örnek olarak aşağıdaki örnekte bir metot için bir stack tanımlaması yapılmıştır :

Referans türü ile ilgili bir örnek yapalım bu seferde : Ilist kullanıyorum örneğimde :

Generic sınıflar birbirinden mirasda alabilir. Buna bir örnek tanımlama yaparsak ;

Arayüzlerde generic tipinde olabilir, örnek tanımlama yaparsak;



Generic
yapılar tanımlandığında bazen parametre olarak kullanılan türün default değerine ihtiyacımız olabilir. Bunun için default operatörü kullanılır. Bu operatör parametre olarak aldığı türün varsayılan değerini döndürür. Basit bir tanımlama gösterirsek;

Generic mimarisinde kısıtlama (constraint) bir yapının hangi tür verileri kabul edeceğini bildirir. Oldukça önemli bir bileşendir. Örneğin bazı durumlarda sadece veri türünden bazen sadece referans türünden parametre girilmesini isteyebiliriz. Ya da belirli bir sınıf ve arabirimden miras alınmış olmasını isteyebiliriz. Bu şekilde bu kısıtlamaları belirtmek için

where şeklinde tanımlama yapılır.

Örnek tanımlama yaparsak :

Generic mimarisinde bunların yanı sıra delegate (temsilci) yapılarıda generic şablon türünde tanımlanabilir. Bildiğiniz gibi, delegeler bir olay gerçekleştiği zaman bunu ilgili metotlara bildiren temsilcilerdir. Delegate tabanlı bir işlem yapılmak istendiği zaman öncelikle bir delegate türünde temsilci bir metot tanımlanır, ardından da söz konusu olay gerçekleştiğinde bu temsilcinin yordamları çağrılır.

Şimdi bunu örnekleyelim, örneğimizde önce iki sayıyı toplayacağız sonra da iki string ifadeyi toplayacağız. Generic delegate tanımlamadan örneğimi yapayım :

Görüldüğü gibi iki delegate tanımladım, oysaki generic bir delegate ile tek delegate ile bu kodu yazabilirim :

Generic mimarisine verilebilecek bir diğer örnek ise Nullable isimli yapıdır. Bu yapı değer tiplerine null değer atabilmemize yarar. Sadece değer tipleri ile birlikte kullanılabilir ve özellikle database uygulamarında sıklıkla kullanılmaktadır, çünkü bir database tablasunda int, decimal gibi veriler boş bırakılabilir. Ve bu alanların boş bırakılıp bırakılmadığı C# tarafında kontrol edilmek istenebilir.. Örnek olarak nullable türünden değer alan tanımlamarımız şöyle olabilir..

 

1 Yorum

  1. ismail bey c# çalışıyorum ve anlamadığım konu olunca direk google’dan “ismal gürsoy vekonuyuyazıyorum ” o kadar güzel net ve anlaşılır anlatıyorsunuz 🙂 Kitap yazın alalım İsmail Bey 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir