C#’daki genel türler, aynı kodun farklı veri türleriyle çalışmasını sağlayarak kodunuzu daha esnek ve tekrar kullanılabilir hale getiren güçlü bir özelliktir. Ancak, bazen genel türlerin belirli bir davranışa sahip olmasını veya belirli bir arayüzü uygulamasını isteyebilirsiniz. İşte bu noktada devreye generic constraints (genel kısıtlamalar) girer.

Genel Kısıtlamalar Nedir?

Genel kısıtlamalar, bir genel türün tür parametrelerini sınırlamak için kullanılır. Bu, bir tür parametresinin belirli bir sınıftan türemiş olmasını, bir arabirim uygulamasını veya bir değeri belirli bir şekilde sınırlamasını sağlar.

Kısıtlama Türleri

1. where T : class

Bu kısıtlama, tür parametresinin bir referans türü olmasını sağlar. Yani, null değeri alabilen bir tür parametresi beklersiniz.

public class ExampleClass<T> where T : class { //... }

2. where T : struct

Bu kısıtlama, tür parametresinin bir değer türü olmasını sağlar. Yani, null değeri alamaz.

public class ExampleStruct<T> where T : struct { //... }

3. where T : new()

Bu kısıtlama, tür parametresinin parametresiz bir kurucu yönteme sahip olmasını sağlar.

public class ExampleWithConstructor<T> where T : new() { //... }

4. where T : MyBaseClass

Bu kısıtlama, tür parametresinin belirli bir sınıftan türemiş olmasını sağlar.

public class ExampleDerivedClass<T> where T : MyBaseClass { //... }

5. where T : IMyInterface

Bu kısıtlama, tür parametresinin belirli bir arabirimi uygulamasını sağlar.

public class ExampleWithInterface<T> where T : IMyInterface { //... }

Kullanım Örnekleri

public class GenericExample<T> where T : class, new()
{
    private T instance;

    public GenericExample()
    {
        instance = new T();
    }

    public void PerformAction()
    {
        //...
    }
}

Bu örnekte, GenericExample sınıfı, T tür parametresinin bir referans türü (class) olmasını ve aynı zamanda parametresiz bir kurucu yönteme (new()) sahip olmasını bekler.

Genel kısıtlamalar, genel türlerinizi daha güçlü hale getirerek hataları azaltmanıza ve kodunuzu daha okunabilir hale getirmenize yardımcı olabilir. Daha fazla bilgi ve örnekler için C# belgelerine başvurabilirsiniz.

Etiketler: