Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önceki makalede, delegate anahtar kelimesini kullanarak belirli temsilci türleri oluşturduğunuzu 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 Action türü ve çeşitli varyasyonlarıdır.
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 tür bağımsız değişkeninde kullanılan in değiştirici, kovaryans makalesinde ele alınmaktadı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 aynı türde de olabilir.
Dönüş türü void olan herhangi bir temsilci türü için Action türlerinden 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
out sonuç genel türü bağımsız değişken modifikasyonu kovaryans makalesinde açıklanmaktadır.
Temsilcinin Func gibi Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,TResult>en fazla 16 giriş bağımsız değişkeni olan varyasyonları vardır.
Sonucun türü, kurala göre her zaman tüm Func bildirimlerdeki son tür parametresidir.
Değer döndüren herhangi bir temsilci türü için türlerden birini Func kullanın.
Tek bir değer üzerinde test döndüren bir temsilci için özelleştirilmiş Predicate<T> türü de vardır.
public delegate bool Predicate<in T>(T obj);
Herhangi bir Predicate tür için yapısal olarak eşdeğer Func bir tür olduğunu fark edebilirsiniz Örneğin:
Func<string, bool> TestForString;
Predicate<string> AnotherTestForString;
Bu iki türün eşdeğer olduğunu düşünebilirsiniz. Onlar değil. 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.