C#

C# Generic Methods

Yazar - UĞUR

Generics

Generics, farklı türler boyunca kodun yeniden kullanılmasına izin verir.
Örneğin, iki parametresinin değerlerini değiştiren bir metot yazalım:

static void Swap(ref int a, ref int b) {
 int temp = a;
 a = b;
 b = temp;
}

Swap metodumuz yalnızca integer parametreleri için çalışır. Diğer türler için, örneğin double veya strings olarak kullanmak istersek, onu kullanmak istediğimiz tüm türler için overload kullanmalıyız. Bu şekilde bir çok kod tekrarının yanı sıra, kodu yönetmek zorlaşır, çünkü tek bir metottaki değişiklikler tüm overload metotlarda değişiklik anlamına gelir.
Generics (Jenerikler), kapsamlı bir tür tanımlamak için esnek bir mekanizma sağlar.

static void Swap<T>(ref T a, ref T b) {
 T temp = a;
 a = b;
 b = temp;
}

Yukarıdaki kodda T, generic türünüzün adıdır. İstediğimiz her şeyi isim olarak verebiliriz, ancak T yaygın olarak kullanılan bir isimdir. Swap metodumuz artık T türü iki parametre alır. Ayrıca değerleri takas etmek amacıyla kullandığımız geçici değişken için T türünü kullanırız.

generic tür tanımlamak için kullanılan <T> söz dizimindeki parantezlere dikkat edin.

Generic Methods

Şimdi, Swap metodumuzu farklı türlerde, şu şekilde kullanabiliriz:

static void Swap<T>(ref T a, ref T b) {
 T temp = a;
 a = b;
 b = temp;
}
static void Main(string[] args) {
 int a = 4, b = 9;
 Swap<int>(ref a, ref b);
 //Now b is 4, a is 9

 string x = "Hello";
 string y = "World";
 Swap<string>(ref x, ref y);
 //Now x is "World", y is "Hello"
}

Generic bir metot çağırırken, çalışacağı türü parantezler kullanarak belirtmeliyiz. Yani, Swap <int> çağrıldığında, T türü int ile değiştirilir. Swap <string> için T, string ile değiştirilir.
Generic (Jenerik) bir yöntem çağırırken türünü belirtmeyi ihmal ederseniz, derleyici metodu geçirilen bağımsız değişkene dayalı bir tür kullanacaktır.

Tek bir metotla birden fazla generic parametre kullanılabilir.
Örneğin: Func <T, U> iki farklı generic türü alır.

 

1 Yorum

Yorum Yap

This site uses Akismet to reduce spam. Learn how your comment data is processed.