Generic Kullanımı
Generic tipleri sınıflar ve struct lar için kullanabilirsiniz. İşte size faydalı bir generic point (nokta) yapısı:
public struct Point
{
public T X;
public T Y;
}
Generic nokta (point) yapısını integer koordinatlar için kullanabilirsiniz. Örneğin:
Point point;
point.X = 1;
point.Y = 2;
Veya double tipinde koordinatlar için:
Point point;
point.X = 1.2;
point.Y = 3.4;
Şimdiye kadar generic tiplerin temel kullanımını gördük. C# 2.0 ın bazı generice özel syntax yapısıda vardır. Mesela default() operatörü kullanılan tipin default değerini döndürür. Örneğin stack yapısında listeden pop yapmak istediğimizde kullandımız Pop() methodunu inceleyelim ve stackın boş olduğu durumlarda default bir değer döndermek isteyelim:
public T Pop()
{
m_StackPointer--;
if(m_StackPointer >= 0)
{
return m_Items[m_StackPointer];
}
else
{
m_StackPointer = 0;
return default(T);
}
}
Referans tipleri için default değer null dır ve value tipleri için default değer 0 dır.
Çoklu Generic Tipleri
Örneğin aşağıdaki gibi bir generic bağlı liste düşünelim:
Kod Blok 3. Generic Bağlı Liste
class Node
{
public K Key;
public T Item;
public Node NextNode;
public Node()
{
Key = default(K);
Item = defualt(T);
NextNode = null;
}
public Node(K key,T item,Node nextNode)
{
Key = key;
Item = item;
NextNode = nextNode;
}
}
public class LinkedList
{
Node m_Head;
public LinkedList()
{
m_Head = new Node();
}
public void AddHead(K key,T item)
{
Node newNode = new Node(key,item,m_Head.NextNode);
m_Head.NextNode = newNode;
}
}
Bağlı liste düğümleri (node) depolar:
class Node
{...}
Her bir düğüm bir anahtar (Generic tip parametresi K) ve bir değer tutar (Generic tip parametresi T). Aynı zamanda her bir düğüm bir sonraki düğüme referans verir. Bağlı listeler generic tip parametreleri K ve T ile tanımlanır:
public class LinkedList
{...}
Bu sayede AddHead() gibi generic methodlar ortaya çıkar:
public void AddHead(K key,T item);
Ne zaman generic tipinde bir değişken tanımladığınızda, kullanacağınız tipleri belirlemek zorundasınız. Ama belirlenen tip argümanları kendileride bir generic tip olabilirler. Örneğin, bağlı liste m_Head adında Node tipinde bir değişkene sahip. Bu listedeki ilk elemana referans veriyor. Aynı zamanda generic tipler olan K ve T ile tanımlanmış.
Node m_Head;
Bir düğümün instance ını oluştururken argümanların tipini belirtmelisiniz., bunun içinse bağlı listenin generic tiplerini kullanabilirsiniz:
public void AddHead(K key,T item)
{
Node newNode = new Node<K,T>(key,item,m_Head.NextNode);
m_Head.NextNode = newNode;
}
Not olarak söyleyelim liste ile node aynı isimlerde generic tipler kullanıyor. Bu sadece okunabilirliği kolaylaştırma açısından bu şekilde yazılmıştır. Aşağıdaki şekillerdede kullanılabilir:
public class LinkedList
{...}Veya:
public class LinkedList
{...}
Listenin örnek kullanımı olarak key ler için integer value lar için string kullanmak istersek:
LinkedList list = new LinkedList ();
list.AddHead(123,"AAA");
İsteyen başka şekillerdede kullanabilir:
LinkedList list = new LinkedList();
list.AddHead(DateTime.Now,"AAA");
Bazen alias kullanmak faydalı olabilir.Bu şekilde bir kullanım sizi kod tekrarından kurtarabilir.
Kod Blok 4. Generic tip alias
using List = LinkedList;
class ListClient
{
static void Main(string[] args)
{
List list = new List();
list.AddHead(123,"AAA");
}
}
Hiç yorum yok:
Yorum Gönder