我々はバインディングに通知を提供するために、INotifyPropertyChangedインターフェイスを使用して、一般的な実装は、このようになりますMVVMを使用するほとんどの時間:なぜイベントを発生させるためにtempraryオブジェクトを使用する必要がありますか?
public class MyClass : INotifyPropertyChanged
{
// properties implementation with RaisePropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
私はからコードを読む時はいつでもこれが私のために正常に動作します私はPropertyChangedイベントのための一時的なオブジェクトを作成するの背後にある正確な理由が何であるかを知っていただきたいと思い
public class MyClass : INotifyPropertyChanged
{
// properties implementation with RaisePropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName)
{
var tempchanged = PropertyChanged;
if (tempchanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
: - 専門家は、彼らが同様のコードを書きました。
それは良い習慣であるか、それに関連するその他の利点はありますか?
でJonの答えと説明した例と答え、私を発見した:
Understanding C#: Raising events using a temporary variable
ここではこれを理解するためのサンプルコードです:
using System;
using System.Collections.Generic;
using System.Threading;
class Plane
{
public event EventHandler Land;
protected void OnLand()
{
if (null != Land)
{
Land(this, null);
}
}
public void LandThePlane()
{
OnLand();
}
}
class Program
{
static void Main(string[] args)
{
Plane p = new Plane();
ParameterizedThreadStart start = new ParameterizedThreadStart(Run);
Thread thread = new Thread(start);
thread.Start(p);
while (true)
{
p.LandThePlane();
}
}
static void Run(object o)
{
Plane p = o as Plane;
while (p != null)
{
p.Land += p_Land;
p.Land -= p_Land;
}
}
static void p_Land(object sender, EventArgs e)
{
return;
}
}
イベント[、トピックのエリックリペットの記事を参照してください http://stackoverflow.com/questions/282653/checking-for-null-before-event-dispatching-thread-safe –
、この記事を参照してくださいRaces](http://blogs.msdn.com/b/ericlippert/archive/2009/04/29/events-and-races.aspx) – Brian