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.
.NET platformunda yeni olan geliştiriciler genellikle delegates tabanlı bir tasarım ile eventstabanlı bir tasarım arasında karar verirken zorlanıyor. İki dil özelliği birbirine benzediğinden temsilci veya olay seçimi genellikle zordur. Olaylar, temsilciler için dil desteği kullanılarak bile oluşturulur. Olay işleyici bildirimi bir temsilci türü bildirir.
Her ikisi de geç bağlama senaryosu sunar: Bir bileşenin yalnızca çalışma zamanında bilinen bir yöntemi çağırarak iletişim kurabileceği senaryoları etkinleştirir. Her ikisi de tek ve birden çok abone yöntemini destekler. Bu terimlerin, tekli yayın ve çoklu yayın desteği olarak bahsedildiğini görebilirsiniz. her ikisi de işleyicileri eklemek ve kaldırmak için benzer söz dizimlerini destekler. Son olarak, bir olayı tetiklemek ve bir temsilciyi çağırmak tam olarak aynı metod çağrı söz dizimini kullanır. Her ikisi de, Invoke() işleci ile kullanılması için aynı ?. yöntemi söz dizimini destekler.
Tüm bu benzerlikler sayesinde, hangisinin ne zaman kullanılacağını belirlemekte zorlanmamak kolaydır.
Olayları Dinlemek İsteğe Bağlıdır
Hangi dil özelliğinin kullanılacağını belirlemede dikkat edilmesi gereken en önemli nokta, ekli abone olup olmaması gerektiğidir. Kodunuzun abone tarafından sağlanan kodu çağırması gerekiyorsa, geri çağırma uygulamanız gerektiğinde temsilcileri temel alan bir tasarım kullanmanız gerekir. Kodunuz herhangi bir aboneyi çağırmadan tüm çalışmalarını tamamlayabiliyorsa olaylara dayalı bir tasarım kullanmanız gerekir.
Bu bölüm sırasında oluşturulan örnekleri göz önünde bulundurun. öğeleri düzgün sıralamak için List.Sort() kullanarak oluşturduğunuz koda bir karşılaştırıcı işlevi verilmelidir. Hangi öğelerin döndürüleceğini belirlemek için LINQ sorguları temsilcilerle birlikte sağlanmalıdır. Her ikisi de temsilcilerle oluşturulmuş bir tasarım kullandı.
Progress olayını göz önünde bulundurun. Bir görevdeki ilerleme durumunu bildirir. Herhangi bir dinleyici olup olmadığına bakılmaksızın görev devam eder.
FileSearcher başka bir örnektir. Olay aboneleri eklenmemiş olsa bile aranan tüm dosyaları arayabilir ve bulabilir. UX denetimleri, olayları dinleyen aboneler olmasa bile düzgün çalışmaya devam eder. Her ikisi de olaylara dayalı tasarımlar kullanır.
Dönüş Değerleri Temsilci Gerektirir
Bir diğer önemli nokta da temsilci yönteminiz için kullanmak istediğiniz yöntem prototipidir. Gördüğünüz gibi, olaylar için kullanılan temsilcilerin tümü geçersiz bir dönüş türüne sahiptir. Olay argüman nesnesinin özelliklerini değiştirerek olay kaynaklarına bilgileri geri aktaracak olay işleyicileri oluşturmaya yönelik deyimler vardır. Bu deyimler işe yarasa da, bir yöntemden değer döndürmek kadar doğal değildir.
Bu iki yöntemin de genellikle mevcut olduğuna dikkat edin: Temsilci yönteminiz bir değer döndürürse algoritmayı bir şekilde etkiler.
Etkinliklerin Özel Daveti Var
Bir olayın bulunduğu sınıf dışındaki sınıflar yalnızca olay dinleyicileri ekleyebilir ve kaldırabilir; yalnızca olayı içeren sınıf olayı çağırabilir. Etkinlikler genellikle genel sınıf üyeleridir. Karşılaştırıldığında, temsilciler genellikle parametre olarak geçirilir ve (eğer depolanırsa) özel sınıf üyeleri olarak saklanır.
Olay dinleyicilerinin yaşam süresi genellikle daha uzun olur
Olay dinleyicilerinin ömrünün daha uzun olması biraz daha zayıf bir gerekçedir. Ancak, olay kaynağı uzun bir süre boyunca olay oluştururken olay tabanlı tasarımların daha doğal olduğunu fark edebilirsiniz. Birçok sistemdeki UX denetimleri için olay tabanlı tasarım örneklerini görebilirsiniz. Bir olaya abone olduktan sonra, olay kaynağı programın ömrü boyunca herhangi bir zamanda olayları tetikleyebilir. (Artık ihtiyacınız kalmadığında etkinliklerden abonelikten çıkabilirsiniz.)
Bununla, bir temsilcinin bir yönteme bağımsız değişken olarak verildiği, ancak yöntem döndüğünde artık kullanılmadığı birçok temsilci tabanlı tasarımla karşılaştırın.
Dikkatlice Değerlendirin
Yukarıdaki önemli noktalar katı ve kesin kurallar değildir. Bunun yerine, belirli bir kullanımınız için en uygun seçimi belirlemenize yardımcı olabilecek yönergeleri temsil ederler. Benzer olduklarından her ikisinin de prototiplerini oluşturabilir ve hangileriyle çalışmanın daha doğal olacağını düşünebilirsiniz. Her ikisi de geç bağlama senaryolarını iyi bir şekilde yönetir. Tasarımınızı en iyi şekilde bildireni kullanın.