Temsilcileri ve Olayları Ayırt Etme
.NET Core platformunda yeni olan geliştiriciler genellikle tabanlı bir tasarım ile tabanlı delegates
bir tasarım events
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.
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 kuracağı senaryoları etkinleştirir. Her ikisi de tek ve birden çok abone yöntemini destekler. Bu, tek noktaya yayın ve çok noktaya yayın desteği olarak adlandırılır. her ikisi de işleyicileri eklemek ve kaldırmak için benzer söz dizimlerini destekler. Son olarak, bir olay oluşturmak ve temsilci çağırmak tam olarak aynı yöntem çağrısı söz dizimini kullanır. Hatta ikisi de işleçle birlikte kullanmak için aynı Invoke()
yöntem söz dizimini ?.
destekler.
Tüm bu benzerliklerle, 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. Kullanarak List.Sort()
oluşturduğunuz koda, öğeleri düzgün bir şekilde sıralamak için 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ı 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ı aramaya ve bulmaya devam eder.
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. Ayrıca, olay bağımsız değişkeni nesnesinin özelliklerini değiştirerek bilgileri olay kaynaklarına geri geçiren olay işleyicileri oluşturmaya yönelik deyimler olduğunu da gördünüz. Bu deyimler işe yarasa da, bir yöntemden değer döndürmek kadar doğal değildir.
Bu iki buluşsal yöntemin de genellikle mevcut olabileceğine dikkat edin: Temsilci yönteminiz bir değer döndürürse algoritmayı bir şekilde etkiler.
Olayların Özel Çağırması 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. Olaylar genellikle genel sınıf üyeleridir. Karşılaştırmak gerekirse, temsilciler genellikle parametre olarak geçirilir ve özel sınıf üyeleri olarak depolanır( hiç depolanmışlarsa).
Olay dinleyicilerinin kullanım ömrü 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şturacaksa 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 olayları tetikler. (Artık ihtiyacınız kalmadığında olayların aboneliğini kaldırabilirsiniz.)
Bir temsilcinin bir yöntemin bağımsız değişkeni olarak kullanıldığı ve bu yöntem döndürdüğünde temsilcinin kullanılmadığı birçok temsilci tabanlı tasarımla karşıtlık.
Dikkatlice Değerlendirin
Yukarıdaki önemli noktalar zor ve hızlı 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. İkisi de geç bağlama senaryolarını iyi işler. Tasarımınızı en iyi şekilde bildireni kullanın.