2011-09-01 13 views
8

このコードはどのように機能しますか?このコードは何を意味しますか(s、e)?

 app.InstallStateChanged += (s, e) => UpdateUI(); 
     NetworkChange.NetworkAddressChanged += 
      (s, e) => UpdateNetworkIndicator(); 

誰かがこれを解読できますか?

コードがhttp://msdn.microsoft.com/en-us/library/dd833066(v=VS.95).aspx

UpdateNetworkIndicatorは何も返さないのSilverlight 4 OOBシステムで使用される例から来ています。 UpdateUIは何も返しません。

答えて

6

UpdateUI()メソッドとUpdateNetworkIndicator()メソッドはどちらもカス​​タムイベントハンドラメソッドです。

+ =演算子は、これらのイベントハンドラをそれぞれappとNetworkChangeによって起動されたイベントに関連付けます。

=>はラムダ式を表します。 (s、e)は入力パラメータ(この場合、標準送信者、イベントargs)であり、=>は文または式です。この場合

、あなたはこれを書き換えることができます:

app.InstallStateChanged += UpdateUI; 
NetworkChange.NetworkAddressChanged += UpdateNetworkIndicator; 

、それだけでも同様に動作するはずです。

+0

ありがとうございました!私は理解しているものに混乱を起こすので、私はこれをチェックしましたが、私の理解を向上させた他のコメントに感謝します。 – Hunt

9

これはラムダ式です。 「 として読み取られるすべてのラムダ式は=ラムダ演算子を使用>、 『

は』になります。ラムダ演算子の左側が入力 パラメータ(もしあれば)を指定し、右側が式を保持していますまたは 文ブロック。ラムダ式は、x => X * X "xはX 回xを行く。" 読み込まれ

http://msdn.microsoft.com/en-us/library/bb397687.aspx

1

InstallStateChangedとNetworkAddressChangedはイベントです、何you're見ていますそれぞれのイベントが発生した場合にUpdateUIまたはUpdateNetworkIndicatorを呼び出すイベントハンドラを定義するラムダ構文。

9

これは複数のパラメータを含むlambda expressionです。この場合(イベントハンドラを置き換える関数を使用しているので)、それらはobjectEventArgsのパラメータに相当します。

コードは

以下
app.InstallStateChanged += OnInstallStateChanged; 
NetworkChange.NetworkAddressChanged += OnNetworkAddressChanged; 

/* ... */ 

private void OnInstallStateChanged(object s, EventArgs e) 
{ 
    UpdateUI(); 
} 

private void OnNetworkAddressChanged(object s, EventArgs e) 
{ 
    UpdateNetworkIndicator(); 
} 
+1

+1この回答は私の投票を得ます。 __good__ stackoverflowの回答IMOに適切なパターンを設定します。 – AnthonyWJones

2

に相当する

Button1.Click += (s, e) => log(e); 

は(ラムダ式を使用して)短い手でこの例を考える

Button1.Click += new EventHandler(Button1_Click); 

1

この構文はLambda Expressionと呼ばれます。MSDNからは、

ラムダ式は 式や文を含めることができ、匿名関数であり、代表者または 式ツリーの型を作成するために使用することができます。

(s, e)は、作成されたデリゲートまたは式ツリーの入力パラメータを宣言します。 1つの入力パラメータがある場合は、かっこは不要で、s => ...と書くことができます。パラメータが複数ある場合は、かっこが必要です((s, e) =>)。

1

簡潔に言えば、sとeは、その機能が対象とするプロパティを持つオブジェクトを指します。このコードでは、この関数でアクセスできるオブジェクトは2種類あります。この関数が呼び出されると、sオブジェクトからthisまたはそのプロパティを取得し、次のようにその値を使用します。

だから仮説文脈においてSが文字列である

Eがint

(S、E)=>

ある機能のさらなる参照は、それらのそれぞれのオブジェクトに言及されていることを意味しますタイプをsとeで指定します。

(S、E)=> s.Length +電子

手段:Sに文字列のインスタンスの値がどのEにINTのインスタンスの値を意味し、それに追加します参照してください。

関連する問題