Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 20054|Yanıt: 0

[Kaynak] C# İleri Kavramları hızlıca anlayın (1) Delege delegasyonu

[Bağlantıyı kopyala]
Yayınlandı 19.01.2017 15:18:00 | | | |
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:







Önceki:MFC tasarımı
Önümüzdeki:Bir dosyanın hangi PID'nin tutulduğunu nasıl öğrenirim
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com