
Öncelikle şunu belirtmeliyim, Generic yapısı hakkında bir bilginiz yoksa bu yazıyı okumadan önce biraz araştırma yaparak bu konuda bilgi edinebilir ve daha sonra bu yazıyı okuyabilirsiniz. Eminim o şekilde çok daha anlaşılır olacaktır. Kendi araştırmalarım ve öğrendiklerimden sonra bu konunun ana mantığını anlamaya çalıştım ve birçok kaynağa eriştim. En sade ve anlaşılır şekilde aşağıda bu konudan anladıklarımı yazmaya çalışacağım.
Bir örnek üzerinden gidelim;

- İlk olarak 2 ayrı string tipte liste tanımladım.
- Bu listelerin içerisine bazı değerler ekledim.
Şimdi kendimiz bir List sınıfı oluşturacağız.

- MyList<T> ile eğer bu sınıftan bir instance oluşturursak bunun içerisinde T parametresini kullanarak bu sınıfın içerisindeki işlemlerde çok biçimlilik sağlayabiliriz.
- MyList sınıfı içerisinde ilk olarak _liste ve _araListe adında 2 ayrı field oluşturdum. Bunların tipi T[], yani T tipinde bir dizi olacak.
- Burada MyList’ten bir nesne türetirsek bunun tipini istediğimiz gibi seçebiliriz. Bu seçtiğimiz T tipine göre de içerisinde T tipinde sınıflar oluşur. Bunu sadece sınıfla sınırlandıramayız. Bu metot vs. için de geçerli bir durumdur. Zaten örnek içerisinde bunları göreceğiz. Devam edelim…

- Daha sonra oluşturduğum constructor(yapıcı metot) ile heap bölgesinde T[0] dizisini oluştuyoruz. Hatırlanacağı üzere constructor(yapıcı metot) bir instance oluşturduğumuzda nesne içerisinde ilk ve bir kez çalışan bir metottu.

- Ekle metodu ile ise oluşturduğumuz _liste içerisine her defasında yeni eleman eklemek istiyorum. Ancak _liste yapısı gereği ilkel bir dizidir. İlk değer olarak T[0] vererek bu dizinin değerini 0 vermiştik. Bunu 2 şekilde yapabiliriz. Ben en üstteki resimde ilk yöntemle yaptım ancak bu kısım için 2. yöntemde kullanılabilir. Aşağıda Ekle metodunda bir _araListe oluşturuyorum ki _liste içerisindeki değerleri yedekleyebilelim. Yedekledikten sonra _liste dizisinin boyutu 1 arttırılır. Daha sonra _araListe içerisindeki değerler tekrar _liste içerisine aktarılır. Verdiğimiz değeri geri aldık. Ne fark var burada? Burada fark olarak _liste hem eski değerlerini almış oldu hem de dizi boyutu 1 arttırılmış oldu.

Şimdi bununla ilgili 2. yönetim ekleyelim. Bu tamamen kendi seçimimiz her ikisini de kullanabiliriz.

- Aşağıdaki metot ile ise oluşturduğumuz _liste uzunluğuna ulaşabiliriz.

- Şimdi ise oluşturduğumuz yapının farkını görelim. İlk kısmı aşağıdaki gibi değiştirsek dahi bir fark olmadığı görülecektir.

Ve böylelikle bu yazıda kendi List sınıfımızı oluşturmuş olduk…