CodeBlanks Logo Icon CodeBlanks

Tür kısıtları

C# kursu · Orta seviye · Ders 72/116

where ile türe, yapıya ve new() kısıtları koymayı öğrenirsin.

where ile tür kısıtı

Bazen generic tür parametresinin ne tür olabileceğini sınırlamak isteyeceksin. where yan tümcesi bunun içindir. class Factory<T> where T : new() yazısı, T'nin parametresiz yapıcı metoda sahip olması gerektiğini söyler.

Başka kısıtlar: where T : class (başvuru türü), where T : struct (değer türü), where T : IComparable<T> (belirli arayüz). Kısıt koyduğunda derleyici, kısıtın sağladığı özellikleri kullanmana izin verir. Örneğin new() kısıtı ile new T() yazabilirsin.

new() kısıtı ile örnek üretmek

new() kısıtı, generic sınıf içinde new T() yazarak yeni bir T örneği üretmene izin verir. Bu, bir factory (üretici) desenini uygulamak için çok kullanışlıdır.

Örnek: class Factory<T> where T : new() { public T Create() { return new T(); } }. Bu sınıf, herhangi bir parametresiz yapıcıya sahip türden yeni örnek üretir. Kısıt olmadan new T() yazamazdın; derleyici T'nin yapıcıya sahip olup olmadığını bilemezdi.

Uygulama Factory<T> ile örnek üret

Factory<T> generic sınıfını tanımla; where T : new() kısıtı ekle. İçinde public T Create() metodu return new T(); yapsın. Widget sınıfı tanımla; public string Name { get; set; } = "Merhaba"; olsun. Main içinde Factory<Widget> örneği üret, Create çağır ve Name'i yazdır.

Örnek çözümü göster
class Factory<T> where T : new() { public T Create() { return new T(); } } yaz. Main'de var f = new Factory<Widget>(); var w = f.Create(); Console.WriteLine(w.Name); ekle.
Örnek çözüm:
using System;

class Factory<T> where T : new()
{
    public T Create()
    {
        return new T();
    }
}

class Widget
{
    public string Name { get; set; } = "Merhaba";
}

class Program
{
    static void Main()
    {
        var f = new Factory<Widget>();
        var w = f.Create();
        Console.WriteLine(w.Name);
    }
}

Kendini test et

  1. Kısıtı anlamına eşle

    where T : class
    Başvuru türü
    where T : struct
    Değer türü
    where T : new()
    Parametresiz yapıcı
    where T : IComparable<T>
    Karşılaştırılabilir
  2. Kısıt yan tümcesi

    class Factory<T> ____ T : new() { }
    Cevabı göster
    class Factory<T> where T : new() { }
  3. new() kısıtı ne sağlar?

    class Factory<T> where T : new()
    {
        public T Create() => ...;
    }
    • T'nin referans türü olmasını
    • T'nin değer türü olmasını
    • T içinde new T() yazılabilmesini
    • T'nin sealed olmasını
    Cevabı göster

    T içinde new T() yazılabilmesini — Doğru. new() kısıtı new T() yazma izni verir.

Orta seviye bölümündeki tüm dersler