Generic Nedir?
Türkçe kelime karşığı olarak “kendi cinsine ait özellikleri taşıyan” anlamına gelen Generic kavramı .Net Framework 2.0 ile birlikte gelen en güçlü yeniliklerden birisidir. Generic’ ler güvenli tipte veri yapıları oluşturmamızı sağlar ve bunun sonucu olarak performansı ve yazdığımız kodun kalitesini artırır. Bir veri işleme algoritmasını herhangibir sınıfa özgü olacak şekilde tasarlamak ve yazmak; aynı algoritmayı farklı şekilde tasarlayabilecegimiz başka sınıflar da varsa fazladan kod yazmak anlamına gelecektir. Generic kavramı bir veri işleme algoritmasının birçok tip tarafından type-safe bir şekilde kullanılmasını sağlar. .NET Framework 2.0 ile birlikte gelen generic, kavram olarak C++ ‘da bulunan template kavramına benzemektedir, fakat yetenekleri ve uygulama alanı açısından bakıldığında C++’daki template kavramından oldukça üstündür.
Programlama açısından bakıldığında stack(yığıt) , array ve arraylist gibi yapılar çok fazla kullanılan veri yapılarıdır. NET Framework 1.1 kütüphanesi ile gelen stack kavramı object sınıfının temelleri üzerine kurulmuştur. Aynı şekilde bir ArrayList nesnesi içerisindeki içsel sınıf mekanızması object sınıfı üzerine kurulmuştur. Arraylist ve stack sınıfının içerisinde barındırdığı veri yapıları object sınıfından birer nesne gibi davranış gösterirler, ancak object sınıfından türemiş nesneler herhangi bir özelliği olmayan nesnelerdir.
Generic sınıfların avantajları :
- compile-time ve run-time esnasında tip güvenliğini etkin bir şekilde sağlar. Değer tipleri için box ve unbox işlemi yapılmaz ve performans artışı oldukça yüksek düzeye çıkmaktadır. Aynı şekilde referans tipleri için cast işlemine gerek kalmamaktadır.
- Oluşturduğumuz generic bir sınıfı .Net kütüphanesinde bulunan bütün tipler ve kendi oluşturduğumuz veri yapıları için kullanabilmekteyiz
- Test işlemleri generic sınıfı için yeterli olacaktır.
- Yazılan uygulamada kodun şişmesi önlenmiş olur, kodun tekrar kullanılabilirliği artar ve bileşen (component) temelli yaklaşım için oldukça avantajlı bir yeniliktir.
Generic Sınıfların Bildirimi & Kullanılması
Generic sınıfların bildiriminde sınıf isminden sonra < > işaretleri arasında tür parametresi belirtilir. Generic bir sınıf bildiriminin genel biçimi şöyledir :
class Sınıf_İsmi <Tür_Parametresi>
{
// ...
}
Tür parametresi; bildirim sırasında herhangi bir türün karşılığı olmayan ve çoğu zaman T, G, AD gibi bir yer tutucudur. Bu yer tutucu(lar) sınıfın kullanımı noktasında bir tür belirtilmesi ile anlam kazanır(lar). Örneğin;
class Sample <T>
{
// ...
}
//...
public static void Main()
{
Sample <int> obj = new Sample <int> ();
}
Yukarıdaki örnekte bildirim sırasında
tür parametresi olarak kullanılan , sınıfın kullanımı noktasında
türünün belirtilmesi ile anlam kazanmıştır.
NOT : Terminolojide
Sample gibi tanımlanan türler;
constructed type biçiminde adlandırılmaktadır !
Çok tipli generic sınıfların bildiriminde birden fazla tür parametresi kullanılabilir.
örneğin :class Sample <AB, CD>
{
// ...
}
// ....
public static void Main()
{
Sample <int, string> obj = new Sample <int, string> ();
}
Bu örnekte ise;
AB -> int ,
CD -> string türlerinin karşılığı olmuşlardır.
Kolay gelsin...