Uzun zamandır .NET geliştirme yapıyorum ve yakın zamanda "C# Advanced Programming" adlı kitabı inceledim. Bir zamanlar anladığım ama anlamadığım birçok sorunun aslında yavaş yavaş incelenip anlaşılabileceğini fark ettim.
Bu yüzden, "C# Gelişmiş Programlama Serisi" hakkında bir blog yazısı yazmaya başlamayı planlıyorum. "C# Gelişmiş Programlama" adlı kitabın konseptinden yararlanacak ve umarım anladığınızı umarak diğer uzmanların blog yazılarına da atıfta bulunacak. Bir sorun varsa, lütfen düzeltin.
(Ayrıca: Bu blog yazısı tanım ve dilbilgisinin temellerini açıklamayacaktır.) )
Sipariş verme hakkında konuşalım.
Delegate, .NET'te yaygın olarak kullanılır. Lambda ifadeleri, etkinlikler, anonimlik yöntemleri vb. dahil olacak (sonraki blog yazıları için bizi takipte kalın).
Peki emanet nedir?
Sade bir ifadeyle, delegeler metod belirlemekten farklı değildir, ancak delege anahtar kelimesini belirtmek zorundadırlar ve metod varlığı yoktur. Örneğin, neyle uğraşacağınızı bilmeden kod yazdığınızda bunu bir yer tutucu olarak düşünebilirsiniz. Sadece tanıtacağınız parametre tipini ve çıkış türünü bilmeniz ve tanımlamanız gerekiyor. Kitapta belirtilen yöntem, imzanın aynı anlamı olması gerektiğidir.
Temel bir delegasyon tanımlayalım:
Uygulama sonuçları:
Yukarıda bahsedilebilecek pratik bir yer görüyor musunuz? YaniBir delege, aynı alım parametre tipine ve dönüş tipine sahip herhangi bir metodu veya aynı imzaya sahip bir metod kuyrukunu çalıştırabilir.
Peki metod imzalarımız (yani içe aktarma ve çıkış parametreleri) gerçekten delege ile tamamen aynı olmak zorunda mı? Cevap: Hayır, kovaryansı ve ters varyasyonu görmezden gelemeziz. Kovaryant ve inverter bilgisini kısaca tanıtalım.
"Kovaryans", orijinal olarak belirtilen türetilmiş tipten daha türetilmiş bir tipin kullanılabilmesini ifade eder. "İnvertör", daha az türevasyon derecesine sahip bir tipin kullanılabilmesini ifade eder. O zaman, komisyonumuz da kovaryans ve tersine tabidir.
Bu, bir delege tanımlandığında, sadece aynı imza yönteminin delege değişkenine değer ataması anlamına gelir.
Bir metodun parametre tablosu delege bildirisiyle eşleşiyorsa, ancak türetilmiş bir sınıf döndürüyorsa (delege bildirisi tipi döndürüyorsa), o zaman yöntem de bu delege değişkenine atanabilir.
Bir metodun dönüş tipi, delegenin bildirisiyle eşleşiyorsa, ancak argüman delege bildiri parametre türünün öncü sınıfı ise, o zaman yöntem delege değişkenine de atanabilir.
Bir yöntemin parametreleri ve dönüş tipi yukarıdaki iki satırdaki varsayımlarla eşleşiyorsa, yöntem de delege değişkenine atanabilir.
Aşağıda kovaryant ve inverter arasındaki basit bir örnek verilmiştir:
Kovaryans:
İnvertör:
|