SORU
25 EYLÜL 2008, PERŞEMBE


Olay zaten eklenmiş işleyicisi vardır?

Bir şekilde, bir olay işleyicisi bir nesne eklendi söylemek var mı? Ben seri bir listesi obje haline out/oturum durumu çok kullanabileceğimiz SQL tabanlı oturum durumu... ne Zaman bir nesne listesinde olan bir özellik değişmiş olması gerekir bayraklı, hangi olay işleyicisi bakmış düzgün önce. Nesneleri olay işleyicisi almak değil mi serisi ancak şimdi.

Hafif sıkıntı bir uyum içinde, ben sadece olay işleyicisi nesnesi erişen özelliği Almak için ekledi. Büyük olan şimdi, işleyici sadece nesne erişilen her zaman katma olmaya devam ediyor sanırım 5 kez aramış olması dışında çağrıldı.

Gerçekten sadece görmezden bir sakınca yok, ama ben daha ziyade bu çok daha temiz olursa işleyicisi zaten ben sadece bir kez yapmak eklendi, görmek için kontrol ederek yapmak istiyorum.

Bu mümkün mü?

EDİT: mutlaka işleyicileri eklenir her şeyin kontrolü yok, sadece boş kontrol yeterince iyi değil.

CEVAP
25 EYLÜL 2008, PERŞEMBE


@Olarak tanımlayan sınıfın dışından, Telos bahseder, sadece = -= Sol tarafta EventHandler kullanabilirsiniz. Bu yüzden, eğer yeteneği değiştirmek için tanımlama sınıf, elinden sağlayan bir yöntem gerçekleştirmek için kontrol tarafından kontrol ederse olay işleyicisi null - eğer öyleyse, o zaman hiçbir olay işleyicisi eklenmiştir. Eğer değilse, ve değerleri döngü sonra belki Delegate.GetInvocationList. Eğer bir olay işleyicisi olarak eklemek istediğiniz temsilci eşitse, orada olduğunu biliyorsun.

public bool IsEventHandlerRegistered(Delegate prospectiveHandler)
{   
	if ( this.EventHandler != null )
	{
		foreach ( Delegate existingHandler in this.EventHandler.GetInvocationList() )
		{
			if ( existingHandler == prospectiveHandler )
			{
				return true;
			}
		}
	}
	return false;
}

Ve bu kolay olmaya değiştirilmiş olabilir "eğer orada değilse işleyicisi Ekle". Eğer bu olay açığa vuran bir sınıfın bağırsaklar için erişim yok eğer doğru değilse, -= @Lou Franco tarafından önerilen =, araştırmak gerekebilir.

Ancak, bu nesneler, bu bilgileri kendiniz izlemek için bir yol bulabilirsiniz eğer görmek devreye alma devreden çıkarma şeklin reexamining daha iyi olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AlaskanGrizzly

    AlaskanGrizz

    30 EKİM 2009
  • Gigawipf

    Gigawipf

    18 ŞUBAT 2010
  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007