2016-03-30 29 views
0

Varsayılan delege bazı durumlarda yeterince yapmadığı bir sorunum var. Bir giriş ve bir postaya ihtiyacı var. Sadece sonra üçÜçlü delege

void BombCatcherGroup(CSELib.Elib self) 
{ 
    BombCatcherStart(self); 
    self.BombCatcher(self); 
    BombCatcherEnd(self); 
} 

CSELib.ELib eventLib = new CSELib.ELib(); 
eventLib.Bomb += BombCatcherGroup; 
... 
eventLib.BombRaise(); 

Temelde aynı şeyi yapar ama sadece kadarıyla merak çağıran bir temsilci çağırmak için üçlü Temsilciye

CSELib.ELib eventLib = new CSELib.ELib(); 
eventLib.Bomb += BombCatcherStart; 
eventLib.Bomb += eventLib.BombCatcher; 
eventLib.Bomb += BombCatcherEnd; 
... 
eventLib.BombRaise(); 

veya aramak daha olup olmadığını merak ediyorum "En iyi uygulama" olarak, üçlü delegede olduğu gibi herkesi öne çıkarmanın mı yoksa tek delegede olduğu gibi saklamanın daha iyi olup olmadığı.

+4

"Herkesi ön tarafa söyleme" ile ne demek istiyorsun? Ve "varsayılan delege yeterince yapmaz" ile ne demek istiyorsun? Senin sorunun biraz belirsiz, ama sanki sadece fikir tabanlı olacak gibi geliyor ... –

+0

En iyi uygulamalara gelince, ilkinden kaçınıyorum. Bu çözüm, olayların, eklendiklerinde aynı sırayla ardışık olarak işlendiği varsayımını yapıyor. Çerçevenin genel olarak böyle bir garantisi olduğunu sanmıyorum. –

+1

Belki de bunu okuyorum ama X-Y sorusu gibi geliyor. 'BeforeBomb' ('Bombing'') ve' AfterBomb' ('Bombed'') etkinliklerini eklemek ve her birine bir kez daha abone olmak için daha çok eğlendim. Bomba'ya başka hangi üyelerin abone olduğunu ve hangi sırada olduğunu kontrol edemezsiniz. Dürüst olmak gerekirse, yapmaya çalıştığınız şeyin tam bir örneği olmadan söylemek zor. –

cevap

0

İşlemlerinizin mantıksal bir zincir oluşturduğu senaryosunda, onları aynı olay için ayrı ayrı işleyiciler olarak eklemenin herhangi bir avantajı yoktur - bu işleyicileri parçadan çıkarılabilir. Buna ihtiyacınız yoksa/istemiyorsanız, ek delege davetlerinin ek yükünden tamamen kaçınılamaz (çoğu senaryoda göz ardı edilebilir) ve yürütme akışını kontrol etme yeteneğinden en azından bir kısmını yitirmiş olursunuz. BombCatcher bir istisna atarsa ​​ne olur? Tüm işlemleriniz aynı yöntem tanımının parçasıysa, kullanımı kolaydır; ayrı delege ile uğraşıyorsanız çok kolay değil.