Jenerik Arayüzler
Türler üzerinde soyutlama yapın.
Jenerik Arayüzler, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 4. 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.
Genel Arabirim Nedir?
Genel bir arabirim, adının ardından gelen açılı parantezler içinde tür parametrelerini bildirir. Uygulayanlar somut türleri seçer ve arabirim sözleşmesi buna göre uyarlanır.
.NET kitaplığı bunları her yerde kullanır; IEnumerable<T> ve IComparable<T> buna örnektir.
interface IRepository<T>
{
void Add(T item);
T Get(int id);
}Genel Bir Arabirimi Uygulama
Bir sınıf, somut bir tür bağımsız değişkeni sağlayarak genel bir arabirimi uygulayabilir. Yöntem imzaları da gerçek türü kullanır.
Bu, tür dönüştürmeleri olmadan tür güvenli ve yeniden kullanılabilir bir sözleşme oluşturur.
using System.Collections.Generic;
class IntStore : IRepository<int>
{
private readonly List<int> data = new();
public void Add(int item) => data.Add(item);
public int Get(int id) => data[id];
}
interface IRepository<T>
{
void Add(T item);
T Get(int id);
}Uygulayanı Genel Tutma
Bir sınıf, kendisi de genel kalırken genel bir arabirimi uygulayabilir ve kendi tür parametresini arabirime iletebilir.
Bu, uygulamanın her öğe türü için yeniden kullanılabilir kalmasını sağlar.
using System.Collections.Generic;
class Store<T> : IRepository<T>
{
private readonly List<T> data = new();
public void Add(T item) => data.Add(item);
public T Get(int id) => data[id];
}
interface IRepository<T> { void Add(T item); T Get(int id); }IComparable<T> Kullanımda
IComparable<T> yerleşik bir genel arabirimdir. Bunu uygulamak, türünüzün örneklerinin nasıl sıralanacağını tanımlamanızı ve sıralama yapabilmenizi sağlar.
CompareTo yöntemi negatif, sıfır veya pozitif bir değer döndürür.
class Money : IComparable<Money>
{
public int Cents;
public int CompareTo(Money? other)
=> Cents.CompareTo(other?.Cents ?? 0);
}IEnumerable<T> Uygulama
IEnumerable<T>, LINQ'in ve foreach döngüsünün temelidir. Bunu uygulayan bir tür üzerinde yineleme yapılabilir. Çoğu zaman iç koleksiyonun yineleyicisini kullanırsınız.
yield return içeren yineleyici yöntemleri bunu kolaylaştırır.
using System.Collections;
using System.Collections.Generic;
class Bag<T> : IEnumerable<T>
{
private readonly List<T> items = new();
public void Add(T x) => items.Add(x);
public IEnumerator<T> GetEnumerator() => items.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}Çalıştırılabilir Bir Genel Arabirim
Bu eksiksiz program, genel bir IPrinter<T> tanımlar, bunu dizeler için uygular ve ardından kullanır.
Arabirim, somut tür ne olursa olsun bir Print yönteminin bulunmasını garanti eder.
using System;
interface IPrinter<T> { void Print(T value); }
class ConsolePrinter<T> : IPrinter<T>
{
public void Print(T value) => Console.WriteLine(value);
}
class Program
{
static void Main()
{
IPrinter<string> p = new ConsolePrinter<string>();
p.Print("hello generics");
}
}out ile Kovaryans
out ile işaretlenmiş bir genel arabirim parametresi kovaryanttır: yalnızca çıktı konumlarında görünür. Bu, IEnumerable<Cat> türünün IEnumerable<Animal> beklenen bir yerde kullanılabilmesini sağlar.
Kovaryans, bir kalıtım zinciri boyunca atama uyumluluğunu korur.
interface IProducer<out T>
{
T Produce();
}in ile Kontravaryans
in ile işaretlenmiş bir parametre kontravaryanttır: yalnızca girdi konumlarında görünür. Bu, IComparer<Animal> türünün IComparer<Cat> gereken bir yerde kullanılabilmesini sağlar.
Kontravaryans, tüketiciler için atanabilirlik yönünü tersine çevirir.
interface IConsumer<in T>
{
void Consume(T item);
}Birden Çok Tür Parametresi
Jenerik arabirimler birden fazla parametre alabilir. IDictionary<TKey, TValue>, anahtar ve değer türlerinin ayrı olduğu tanıdık bir örnektir.
Her parametre bağımsız olarak değişmez, kovaryant veya kontravaryant olabilir.
interface IMapper<TIn, TOut>
{
TOut Map(TIn input);
}Arabirime Göre Programlama
Somut bir sınıf yerine jenerik bir arabirime bağlı olmak, kodu esnek hâle getirir. Çağıran kodu değiştirmeden uygulamaları değiştirebilirsiniz.
IEnumerable<T> türündeki yöntem parametreleri listeleri, dizileri ve sorgu sonuçlarını aynı şekilde kabul eder.
using System.Collections.Generic;
using System.Linq;
int Total(IEnumerable<int> values) => values.Sum();Jenerik Arabirimleri Kullanarak Kısıtlamalar
Jenerik arabirimler sıklıkla kısıtlama olarak kullanılır. where T : IComparable<T>, bir yöntemin girdilerini sıralamasına veya karşılaştırmasına olanak tanır.
Bu yaklaşım, güvenli ve yeniden kullanılabilir algoritmalar için iki jenerik özelliği bir araya getirir.
T Min<T>(T a, T b) where T : IComparable<T>
=> a.CompareTo(b) <= 0 ? a : b;Kısa Sınama
Jenerik arabirimlerle ilgili anlayışınızı sınayın.
Özet
Jenerik arabirimler tür parametrelerini bildirir ve bunları uygulayan türlerin bu parametreleri belirlemesine veya aktarmasına olanak tanır. Yerleşik örnekler arasında IEnumerable<T>, IComparable<T> ve IDictionary<TKey, TValue> bulunur.
out ve in varyans belirteçleri kovaryans ve kontravaryansı mümkün kılar; jenerik arabirimler ayrıca where kısıtlamalarıyla doğal biçimde birlikte kullanılır.
Sıkça Sorulan Sorular
“Jenerik Arayüzler” dersi ücretsiz mi?
Evet — “Jenerik Arayüzler” 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.
“Jenerik Arayüzler” dersinde ne öğreneceğim?
Türler üzerinde soyutlama yapı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 4. dersidir.
“Jenerik Arayüzler” 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