Я видел такой код в некоторых местах:
public event SomeEventHandler SomeEvent = (s, e) => { };
Это рекомендуемый способ ведения дел? Что это решает, и есть ли какие-нибудь заметные побочные эффекты? Я все еще должен буду сделать нулевые проверки? Или это именно то, что мне больше не нужно делать? Будет ли сборка мусора работать как надо?
Например:
private PropertyChangedEventHandler propertyChanged;
private readonly object propertyChangedLock = new object();
public event PropertyChangedEventHandler PropertyChanged
{
add
{
lock (propertyChangedLock)
propertyChanged += value;
}
remove
{
lock (propertyChanged)
propertyChanged -= value;
}
}
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler;
lock (propertyChangedLock)
handler = propertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
Могу ли я изменить первую строку на это:
private PropertyChangedEventHandler propertyChanged = (s, e) => { };
А затем пропустить нулевую проверку в методе OnPropertyChanged? И если я тогда пропущу нулевую проверку, могу ли я тогда также пропустить блокировку? Если так, то это даст мне следующее:
protected void OnPropertyChanged(string propertyName)
{
propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
Будет ли это безопасно при учете инициализации? Или есть какие-то побочные эффекты, которые я пропустил?