Generic Nedir? Bildirimi ve Kullanımı

10 Aralık 2007

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...

Remoting Semineri

07 Aralık 2007


Etkinlik Konusu : Remoting Semineri
Etkinlik Türü : Seminer
Kontenjan : 100

Etkinlik Tarihi - Saati : 11.12.2007 -- 13.00 - 16.00
Süre : 1 Gün
Eğitimi Veren : Aykut TAŞDELEN
Etkinlik Yeri : Yıldız Teknik Üniversitesi Konferans Salonu

ETKINLIK IÇERİĞİ


Remoting
, Microsoft'un yeni nesil RPC (remote procedure call) teknolojisine verilen isimdir. Microsoft'un kurumsal iş uygulamalarının geliştirilmesi için çok önemli olan ancak çok da fazla bilinmeyen bu teknolojisini, Microsofttan 4 ez üst üst MVP ünvanı alan ve INETA (Uluslararası .NET Birliği) MEA Bölge Başkanı olan Aykut TAŞDELEN'in anlatımı ile öğrenebilirsiniz.

Seminerde ele alınacak konu başlıkları:

Remoting Nedir ?
Dağıtık uygulamalara giriş
Daha önce kullanılan teknolojiler. DCOM, CORBA, RMI
.NET ve dağıtık uygulama geliştirme
Channel Formatter kavramları
Aktivasyon Proxy kavramları
Lease-Based Lifetime
Object Marshaling
SAO ve CAO nesne modelleri