2009-08-28 22 views
20

Bu soruya bir Microsoft Practice Testinde rastladım ve kafam karıştı. İşte soru:C# içinde bir olay yükseltin #

bir olayı yükseltmek uygun yolu aşağıdaki C# kod örnekleri ait olduğunu Alarm olayı, AlarmEventArgs sınıf ve AlarmEventHandler temsilci olmuştur ilan ettiler varsayarak?

AlarmEventArgs e = new AlarmEventArgs(1, 2); 
AlarmEventHandler handler = Alarm; 
if (handler != null) 
{ 
    handler(this, e); 
} 

Ancak aynı zamanda doğru görünüyor başka cevabı vardır: İşte

onlar sağlanan "Doğru" cevabı.

AlarmEventArgs e = new AlarmEventArgs(1, 2); 
if (Alarm!= null) 
{ 
    Alarm (this, e); 
} 

Şahsen, her zaman ikinci yöntemi kullanın. Sadece iyi çalışıyor. Birisi bana neden ikinci yöntem yerine ilk yöntemi kullanmam gerektiğini söyleyebilir mi?

+2

olası bir kopyası [olay gönderilmeden önce null denetleniyor ... iş parçacığı güvenli mi?] (Http://stackoverflow.com/questions/282653/checking-for-null-before-event-dispatching-thread-safe) – doppelgreener

cevap

15

Benzer bir soru sordum. Kabul edilen cevap iyi bir açıklamadır. Bir çok kanallı bir ortamda

Checking for null before event dispatching... thread safe?

+0

'Cherian' kullanıcısı tarafından önerilen anonim delege yöntemi sadece güzel. Kazanan eller aşağı-in :) –

+0

Bir kez size boş işleyicileri tamam biraz fonksiyonel bir kavram başını olsun – spender

7

, bu olay gönderildiğinde edilirken olay işleyicisi güncellenebilir olması mümkündür. Bu senaryoyu önlemek için, işleyiciyi, boş olup olmadığını ve iletiyi göndermeden önce yerel bir değişkene atarsınız.

İlgili konular