where Kısıtlamaları
Tür parametrelerini kısıtlayın.
where Kısıtlamaları, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Kısıtlar Neden Vardır
Varsayılan olarak T tür parametresi neredeyse object gibi değerlendirilir; bu nedenle derleyici üzerinde çok az işleme izin verir. where ile yazılan kısıtlar, derleyiciye T hakkında daha fazla bilgi verir.
Bu bilgi sayesinde yöntemleri çağırabilir, örnekler oluşturabilir veya değerleri güvenle karşılaştırabilirsiniz.
void Show<T>(T value) where T : IFormattable
{
// now ToString(format, provider) is available
}Arabirim Kısıtları
Bir arabirim kısıtı, T türünün belirli bir arabirimi uygulamasını gerektirir. Böylece gövde, o arabirimin üyelerini çağırabilir.
Aşağıdaki where T : IComparable<T> kısıtı, bir CompareTo yönteminin var olduğunu garanti eder.
T Max<T>(T a, T b) where T : IComparable<T>
=> a.CompareTo(b) >= 0 ? a : b;Temel Sınıf Kısıtları
T türünün belirli bir temel sınıftan türemesini zorunlu kılabilirsiniz. Böylece bu temel türün üyeleri genel kodun içinde kullanılabilir.
Bu yaklaşım, tüm varlıkların ortak bir temel türü paylaştığı çerçevelerde yaygındır.
class Animal { public string Name = ""; }
string NameOf<T>(T a) where T : Animal => a.Name;class Kısıtı
where T : class, T türünün bir başvuru türü olmasını gerektirir. Bu, null atamasına ve başvuru eşitliği denetimlerine izin verir.
Bu kısıt, depolar, önbellekler ve null olabilir başvuruları depolayan her şey için tipiktir.
T? FindOrNull<T>(bool found, T value) where T : class
=> found ? value : null;struct Kısıtı
where T : struct, T türünün null olamayan bir değer türü olmasını gerektirir. Bu sayede T bir değer türü olarak ele alınabilir ve T? null olabilir bir değer türü olarak kullanılabilir.
Bu kısıt yalnızca sayılar, numaralandırmalar veya küçük yapı türleriyle çalışan yardımcılar tarafından kullanılır.
T? AsNullable<T>(T value) where T : struct
=> value;new() Kısıtı
new() kısıtı, T türünün herkese açık, parametresiz bir oluşturucusu olmasını gerektirir. Böylece gövde içinde new T() yazılabilir.
Fabrika yapıları ve nesne havuzları, örnekleri genel biçimde oluşturmak için bu kısıta dayanır.
using System;
class Program
{
static T Make<T>() where T : new() => new T();
static void Main()
{
var list = Make<System.Collections.Generic.List<int>>();
Console.WriteLine(list.Count);
}
}Kısıtları Birleştirme
Tek bir parametreye birkaç kısıt uygulayabilirsiniz. Sıralama kuralları, önce class veya struct, sonra temel sınıf, ardından arabirimler ve en son new() kullanılmasını gerektirir.
Kısıtlar tek bir where sonrasında virgüllerle ayrılarak listelenir.
T Build<T>() where T : class, IComparable<T>, new()
=> new T();Birden Çok where Yan Tümcesi
Bir yöntem veya sınıfın birkaç tür parametresi olduğunda her biri kendi where yan tümcesine sahip olur. Bunlar art arda yazılır.
Bu, her parametrenin kısıtlarını açıkça birbirinden ayrı tutar.
TResult Convert<TInput, TResult>(TInput x)
where TInput : class
where TResult : new()
=> new TResult();Çalıştırılabilir Bir Kısıt Örneği
Bu eksiksiz program, iki değerden büyük olanı bulmak için bir IComparable<T> kısıtı kullanır ve hem int'lerle hem de dizelerle çalışır.
CompareTo çağrısını yöntemin içinde geçerli kılan kısıttır.
using System;
class Program
{
static T Max<T>(T a, T b) where T : IComparable<T>
=> a.CompareTo(b) >= 0 ? a : b;
static void Main()
{
Console.WriteLine(Max(3, 9));
Console.WriteLine(Max("apple", "pear"));
}
}notnull ve unmanaged Kısıtları
Daha yeni C# sürümleri daha fazla kısıt ekler. where T : notnull, sözlük anahtarları için yararlı olan null olabilir türleri engeller. where T : unmanaged ise düşük düzeyli kod için T türünü blittable değer türleriyle sınırlar.
Bunlar, özel kullanım senaryolarında güvenliği artırır.
void Use<T>(T key) where T : notnull { }
unsafe void Raw<T>(T v) where T : unmanaged { }Kısıtlar Gücü Kısıtlamak Yerine Etkinleştirir
Kısıtlar kısıtlama gibi görünse de aslında yeteneklerin kilidini açar. Bir kısıt olmadan T üzerinde neredeyse hiçbir işlem yapamazsınız; kısıtla birlikte onun üyelerine erişebilirsiniz.
Algoritmanızın çalışmasını sağlayan en az kısıtı seçin ve tür parametresini mümkün olduğunca esnek tutun.
// No constraint: only object members available
string Name<T>(T x) => x.ToString();Kısa Sınama
where kısıtlarıyla ilgili anlayışınızı sınayın.
Özet
where yan tümcesi tür parametrelerini kısıtlar: arabirim, temel sınıf, class, struct, new(), notnull ve unmanaged. Her kısıt, T üzerinde belirli işlemlerin kullanılabilmesini sağlar.
Bunları doğru sıraya koyun, her parametre için bir yan tümce kullanın ve algoritmanızın gerektirdiği en az kısıtı seçin.
Sıkça Sorulan Sorular
“where Kısıtlamaları” dersi ücretsiz mi?
Evet — “where Kısıtlamaları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“where Kısıtlamaları” dersinde ne öğreneceğim?
Tür parametrelerini kısıtlayın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“where Kısıtlamaları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Jenerik Yöntemler
- Jenerik Sınıflar
- where Kısıtlamaları
- Jenerik Arayüzler