でイベントハンドラを初期化私は、コードのこの種にいくつかの場所を見てきました:C#の:ダミー
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));
}
初期化を考慮に入れても安全ですか?または私が逃したいくつかの副作用はありますか?
件名に関する私の記事:http://blogs.msdn.com/ericlippert/archive/2009/04/29/events-and-races.aspx –
素敵な記事!言い換えれば、ヌルチェックを削除することはスレッドセーフです。しかし、加入者は壊れないスマートハンドラを持つ必要があります。私はそれを得ましたか? – Svish