Önceki makalede, anahtar sözcüğünü kullanarak belirli temsilci türleri oluşturduğunuzu delegate gördünüz.
Soyut Delegate sınıfı, gevşek bağlama ve çağırma için altyapı sağlar. Somut Temsilci türleri, temsilci nesnesi için çağırma listesine eklenen yöntemler için tür güvenliğini benimserek ve zorunlu kılarak çok daha kullanışlı hale gelir. anahtar sözcüğünü delegate kullandığınızda ve somut bir temsilci türü tanımladığınızda, derleyici bu yöntemleri oluşturur.
Pratikte bu, farklı bir yöntem imzasına ihtiyacınız olduğunda yeni temsilci türleri oluşturulmasına yol açabilir. Bu çalışma bir süre sonra sıkıcı olabilir. Her yeni özellik için yeni temsilci türleri gerekir.
Neyse ki buna gerek yok. .NET Core çerçevesi, temsilci türlerine ihtiyacınız olduğunda yeniden kullanabileceğiniz çeşitli türler içerir. Bunlar genel tanımlardır, bu nedenle yeni yöntem bildirimlerine ihtiyacınız olduğunda özelleştirmeler bildirebilirsiniz.
Bu türlerden ilki türü ve çeşitli varyasyonlarıdır Action :
public delegate void Action();
public delegate void Action<in T>(T arg);
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);
// Other variations removed for brevity.
Genel in tür bağımsız değişkenindeki değiştirici kovaryans makalesinde ele alınmıştır.
Temsilcinin Action gibi en fazla 16 bağımsız değişken içeren varyasyonları Action<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>vardır.
Bu tanımların temsilci bağımsız değişkenlerinin her biri için farklı genel bağımsız değişkenler kullanması önemlidir: Bu size maksimum esneklik sağlar. Yöntem bağımsız değişkenlerinin aynı türde olması gerekmez, ancak olabilir.
Geçersiz dönüş türüne Action sahip herhangi bir temsilci türü için türlerden birini kullanın.
Çerçeve ayrıca değer döndüren temsilci türleri için kullanabileceğiniz çeşitli genel temsilci türleri içerir:
public delegate TResult Func<out TResult>();
public delegate TResult Func<in T1, out TResult>(T1 arg);
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);
// Other variations removed for brevity
Sonuç out genel türü bağımsız değişkenindeki değiştirici kovaryans makalesinde ele alınmıştır.
Bu iki türün eşdeğer olduğunu düşünebilirsiniz. Durum bu değildir.
Bu iki değişken birbirinin yerine kullanılamaz. Bir türdeki değişkene diğer tür atanamaz. C# türü sistemi, yapıyı değil tanımlı türlerin adlarını kullanır.
.NET Core Kitaplığı'ndaki tüm bu temsilci türü tanımları, oluşturduğunuz ve temsilci gerektiren yeni bir özellik için yeni bir temsilci türü tanımlamanız gerekmediği anlamına gelir. Bu genel tanımlar, çoğu durumda ihtiyacınız olan tüm temsilci türlerini sağlamalıdır. Gerekli tür parametreleriyle bu türlerden birinin örneğini oluşturabilirsiniz. Genel hale getirilebilen algoritmalar söz konusu olduğunda, bu temsilciler genel türler olarak kullanılabilir.
Bu, zaman kazanmalı ve temsilcilerle çalışmak için oluşturmanız gereken yeni türlerin sayısını en aza indirmelidir.
Sonraki makalede, pratikte temsilcilerle çalışmaya yönelik çeşitli yaygın desenler göreceksiniz.
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.