Aracılığıyla paylaş


Olay Tasarımı

Not

Bu içerik, Çerçeve Tasarım Yönergeleri: Kurallar, Deyimler ve Yeniden Kullanılabilir .NET Kitaplıkları için Desenler, 2. Sürüm'den Pearson Education, Inc.'in izniyle yeniden yazdırılır. Bu baskı 2008'de yayımlandı ve kitap o zamandan beri üçüncü baskıda tamamen revize edilmiştir. Bu sayfadaki bazı bilgiler güncel olmayabilir.

Olaylar, en yaygın kullanılan geri çağırma biçimidir (çerçevenin kullanıcı koduna çağrılmasına izin veren yapılar). Diğer geri çağırma mekanizmaları arasında temsilciler, sanal üyeler ve arabirim tabanlı eklentiler alan üyeler bulunur. Kullanılabilirlik çalışmalarından alınan veriler, geliştiricilerin çoğunluğunun olayları diğer geri çağırma mekanizmalarından daha rahat kullandıklarını göstermektedir. Olaylar Visual Studio ve birçok dille güzel bir şekilde tümleştirilmiştir.

İki olay grubu olduğunu unutmayın: sistem durumu değişmeden önce tetiklenen olaylar ( ön olaylar olarak adlandırılır) ve durum değişikliklerinden sonra tetiklenen olaylar (post-events) olarak adlandırılır. Form kapatılmadan Form.Closingönce tetiklenen ön olaya örnek olarak örnek olarak verilmiştir. Bir form kapatıldıktan sonra ortaya çıkan olay sonrası örneği olabilir Form.Closed.

✔️ DO, "fire" veya "trigger" yerine olaylar için "raise" terimini kullanın.

✔️ OLAY işleyicisi olarak kullanılacak yeni temsilcileri el ile oluşturmak yerine DO kullanın System.EventHandler<TEventArgs> .

✔️ Olayın hiçbir zaman olay işleme yöntemine EventArgs veri taşımasına gerek kalmayacağı sürece, olay bağımsız değişkeni olarak alt sınıfını kullanmayı göz önünde bulundurun. Bu durumda türü doğrudan kullanabilirsiniz EventArgs .

Bir API'yi doğrudan kullanarak EventArgs gönderirseniz, uyumluluğu bozmadan olayla birlikte taşınacak herhangi bir veri ekleyemezsiniz. Bir alt sınıf kullanıyorsanız, başlangıçta tamamen boş olsa bile, gerektiğinde alt sınıfa özellikler ekleyebilirsiniz.

✔️ DO, her olayı tetiklerken korumalı bir sanal yöntem kullanır. Bu yalnızca korumasız sınıflardaki statik olmayan olaylar için geçerlidir; yapılar, korumalı sınıflar veya statik olaylar için geçerli değildir.

yönteminin amacı, türetilmiş bir sınıfın geçersiz kılma kullanarak olayı işlemesi için bir yol sağlamaktır. Geçersiz kılma, türetilmiş sınıflardaki temel sınıf olaylarını işlemenin daha esnek, daha hızlı ve daha doğal bir yoludur. Kural gereği, yöntemin adı "Açık" ile başlamalı ve olayın adıyla izlenmelidir.

Türetilmiş sınıf, geçersiz kılmada yönteminin temel uygulamasını çağırmamayı seçebilir. Temel sınıfın düzgün çalışması için gereken yönteme herhangi bir işlem eklemeyerek buna hazırlıklı olun.

✔️ DO, bir olay oluşturan korumalı yönteme bir parametre alır.

parametresi adlandırılmalı e ve olay bağımsız değişkeni sınıfı olarak yazılmalıdır.

❌ Statik olmayan bir olayı oluştururken gönderen olarak null GEÇIRMEYİn.

✔️ DO, statik olay oluştururken gönderen olarak null değerini geçirir.

❌ Bir olayı oluştururken olay verileri parametresi olarak null geçirmeYIN.

Olay işleme yöntemine herhangi bir veri geçirmek istemiyorsanız geçirmelisiniz EventArgs.Empty . Geliştiriciler bu parametrenin null olmamasını bekler.

✔️ Son kullanıcının iptal edebildiği olayları oluşturmayı göz önünde bulundurun. Bu yalnızca ön olaylar için geçerlidir.

Son kullanıcının olayları iptal etmesine izin vermek için olay bağımsız değişkeni olarak veya alt sınıfını kullanın System.ComponentModel.CancelEventArgs .

Özel Olay İşleyicisi Tasarımı

Çerçevenin, Genel Türleri desteklemeyen clr'nin önceki sürümleriyle çalışması gerektiği durumlar gibi kullanılamayan durumlar EventHandler<T> vardır. Böyle durumlarda, özel bir olay işleyici temsilcisi tasarlamanız ve geliştirmeniz gerekebilir.

✔️ DO, olay işleyicileri için void dönüş türünü kullanır.

Olay işleyicisi, büyük olasılıkla birden çok nesne üzerinde birden çok olay işleme yöntemini çağırabilir. Olay işleme yöntemlerinin bir değer döndürmesine izin verilseydi, her olay çağrısı için birden çok dönüş değeri olurdu.

✔️ DO, olay işleyicisinin ilk parametresinin türü olarak kullanın object ve çağırın sender.

✔️ DO, olay işleyicisinin ikinci parametresinin türü olarak veya alt sınıfını kullanın System.EventArgs ve çağırın e.

❌ Olay işleyicilerinde ikiden fazla parametre YOK.

Porsiyonlar © 2005, 2009 Microsoft Corporation. Tüm hakları saklıdır.

Pearson Education, Inc. in Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraryes, 2nd Edition by Krzysztof Cwalina and Brad Abrams izniyle yeniden yazdırıldı ve 22 Ekim 2008'de Addison-Wesley Professional tarafından Microsoft Windows Geliştirme Serisi'nin bir parçası olarak yayımlandı.

Ayrıca bkz.