Можно использовать следующую конструкцию для объявления события:
public class MyClass
{
public event EventHandler<EventArgs> SomeEvent = (s,e) => {};
public void SomeMethod ()
{
// Do something interesting... ;)
SomeEvent (this, new EventArgs);
}
}
Это позволяет вызвать событие без необходимости проверять, является ли событие нулевым.
Теперь, скажем, чтообъект A содержит ссылку на объект MyClass, регистрируется для события, а затем отменяет его регистрацию.
var myClass = new MyClass();
myClass.SomeEvent += MyHandler;
...
myClass.SomeEvent -= MyHandler;
myClass = null;
Будет ли сборщик мусора собирать myClass, даже если насобытие?
Я так думаю, потому что корень объекта больше не является ссылкой на другие объекты ... Кто-нибудь может подтвердить или доказать обратное?