質問

が誰かの意味を教えて下記の部分のコード:

private event UserChangedHandler m_UserChanged;
public event UserChangedHandler UserChanged
{
  add
  {
      if (m_UserChanged != value)
      {
        m_UserChanged += value;
      }
  }
}

感謝

役に立ちましたか?

解決

add { } が構築しよう get { } 物件以外の追加作品です。いを定義するカスタム機能のた場合の追加代表者へのイベントです。

この場合、このメソッド体の防止 複製(できません登録と同様の方法/ハンドラを回 ).

この例:

public void HandlerUserChanged(object o, UserChangedEventArgs args)
{
     // some code
}

public void HandlerUserChanged2(object o, UserChangedEventArgs args)
{
     // some code
}

降:

UserChanged += HandleUserChanged;
UserChanged += HandleUserChanged;
UserChanged(this, new UserChangedEventArgs());

の方法 HandleUserChanged でのみ火を一度でもご登録いただいたします。通常のイベント無し add { } うを呼び出す機能。

しかし:

UserChanged += HandleUserChanged;
UserChanged += HandleUserChanged2;
UserChanged += HandleUserChanged;
UserChanged(this, new UserChangedEventArgs());

HandleUserChanged 火災、でのハンドラが登録されないものを追加していきます。==演算子のイベントの最後のハンドラです。 (ロへのMatthewえることに注意)

他のヒント

これは、(右用語ことを...私は/代表者wを混乱さ)m_UserChangedがイベントだけではなく、デリゲートのインスタンスとして宣言されていることを奇数として私を打ちます。イベントは、彼らは本質的に透明でメソッドのペアの中に根本的なフィールドをラップすることで、単純なプロパティのモデルに類似しています。

私はそれを理解する方法は、.NETはこのような何かを取ることによってimplcit(?匿名)イベントとプロパティを作成できます:

public int Value { get; set;}
public event EventHandler ValueChanged;

、その後、より多くのこのような何かを生成するために、それぞれの基本的なプレースホルダオブジェクトを作成します:

private int _Value;
public int Value { get { return _Value;} set { _Value = value;}}

private EventHandler _ValueChanged;
public event EventHandler ValueChange { add { _ValueChanged += value;} remove { _ValueChanged -= value;}}

基礎となるオブジェクトはもちろん、明示的に定義することができますが、何のように見える上記のコードサンプルは、明示的および暗黙的なイベント宣言の間に混同のビットです...以下は、実際に舞台裏(行われているように見えます、それは)あったようにます:

private UserChangedHandler _m_UserChanged; 
private event UserChangedHandler m_UserChanged { add { _m_UserChanged += value;} remove { _m_UserChanged -= value;}}
public event UserChangedHandler UserChanged 
{ 
  add 
  { 
      if (m_UserChanged != value) 
      { 
        m_UserChanged += value; 
      } 
  } 
} 

これは本当に物事の壮大な計画で重要で、私は推測していないが、それは監督のように見えません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top