C# yazılım dilinde generic sınıflar oldukça güçlü ve esnek bir özelliktir. Generic sınıflar, farklı veri tipleriyle çalışabilen sınıflar oluşturulmasına olanak tanır. Bu sayede, kod tekrarı azaltabilir ve daha tür güvenli bir kod yazılabilir.
Generic Sınıflar Nedir?
Generic sınıflar, belirli bir veri türüyle sınırlı olmayan ve herhangi bir veri türüyle çalışabilen sınıflardır. Bu sınıflar, tip güvenliğini sağlarken aynı zamanda yeniden kullanılabilirliği artırır. Generic sınıflar, bir sınıfın veya metodun tanımlanırken tip belirtmeden, o sınıf veya metodun kullanılacağı zaman tipi belirleyebilmenizi sağlar.
Generic Sınıf Tanımlama
Generic bir sınıf tanımlarken, sınıf adının yanına bir tür parametresi eklenir. Bu tür parametresi, T gibi bir harf veya anlamlı bir isim olabilir.
public class GenericClass<T>
{
private T field;
public GenericClass(T value)
{
field = value;
}
public T GetValue()
{
return field;
}
public void SetValue(T value)
{
field = value;
}
}
Generic Sınıf Kullanımı
Generic sınıfları kullanırken, sınıfın oluşturulma zamanında tipin belirtilmesi gerekir.
GenericClass<int> intInstance = new GenericClass<int>(42);
int intValue = intInstance.GetValue(); // 42 döner
GenericClass<string> stringInstance = new GenericClass<string>("Hello");
string stringValue = stringInstance.GetValue(); // "Hello" döner
Generic Metotlar
Generic sınıfların yanı sıra, generic metotlar da tanımlanabilir. Bir metodu generic hale getirmek için metot adının yanına tür parametresi eklenebilir:
public class Utility
{
public static void Swap<T>(ref T lhs, ref T rhs)
{
T temp = lhs;
lhs = rhs;
rhs = temp;
}
}
Generic Kısıtlamalar
Generic sınıflar ve metotlar, belirli türlerle sınırlandırılabilir. Bu kısıtlamalar, generic tür parametresinin belirli bir sınıfı, arabirimi veya yeni bir oluşturulabilir türü uygulamasını gerektirebilir:
public class GenericClass<T> where T : class
{
// T sadece bir referans tipi olabilir
}
public class GenericClass<T> where T : IComparable<T>
{
// T, IComparable arayüzünü uygulayan bir tür olmalıdır
}
public class GenericClass<T> where T : new()
{
// T'nin parametresiz bir kurucusu (constructor) olmalıdır
}
Generic Koleksiyonlar
.NET'te yaygın olarak kullanılan birçok koleksiyon sınıfı generic olarak tanımlanmıştır. Örneğin, List<T>, Dictionary<TKey, TValue>, Queue<T>, ve Stack<T> gibi. Bu koleksiyonlar, tür güvenliğini ve performansı artırır.
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
Dictionary<string, int> dictionary = new Dictionary<string, int>
{
{ "one", 1 },
{ "two", 2 }
};
Avantajları
Tip Güvenliği: Derleme zamanında hataları yakalayarak runtime hatalarını azaltır.
Performans: Boxing ve unboxing ihtiyacını ortadan kaldırarak performansı artırır.
Kod Tekrarını Azaltma: Farklı veri türleriyle çalışabilen kod yazmanızı sağlar.
Sonuç
C# generic sınıflar, daha esnek, yeniden kullanılabilir ve tip güvenli kod yazmanıza yardımcı olur. Bu özellikler sayesinde yazılım geliştiriciler, daha az kod yazarak daha fazla işlevsellik elde edebilirler. Generic sınıfları ve metotları anlamak ve etkin bir şekilde kullanmak, C# dilinde daha güçlü ve etkili programlar yazılmasını sağlar.