Есть вот такой код:internal class Program {
public void SimpleCallback(object sender, EventArgs eargs) {}
public event EventHandler<EventArgs> someEvent;
public virtual void OnSomeEvent() {
EventHandler<EventArgs> temp = someEvent;
if(temp != null) {
// например, тут влезает другой поток: someEvent = null;
temp(this, EventArgs.Empty); <b>// ? Почему вызывается SimpleCallback(), а не throw NullRefferenceException ?</b>
}
}
public static void Main(string[] args) {
Program p2 = new Program();
p2.someEvent += p2.SimpleCallback;
p2.OnSomeEvent();
}
}
В методе OnSomeEvent() создается локальная переменная temp, которая, как я думал, является ссылкой на someEvent, но код ниже выполняется.. Выходит, что temp это копия, а не ссылка...
Объясните пожалуйста, как работает этот код.
Данное сообщение получено с сайта GotDotNet.RU
Последний раз редактировалось 27 December 2007 20:04
|