+C#+言語セクション?
匿名メソッドは、基本的にコード ブロックをデリゲート パラメータとして渡すために作成します。
書き方1:
button1.Click += delegate(System.Object o, System.EventArgs e) { System.Windows.Forms.MessageBox.Show("Click!"); };
書き方2:
delegate void Del(int x); Del d = delegate(int k) { /* 処理 */ };
//デリゲートの宣言 public delegate void Del<T>(T item); public void Notify(string str) { }
Del<string> name = Notify;
デリゲート オブジェクトには、+ 演算子を使用して二つデリゲートを結合できます。結合されたデリゲートは、結合元の 2 つのデリゲートを呼び出します。結合できるのは同じ型のデリゲートだけです。- 演算子を使用すると、結合されたデリゲートからコンポーネントのデリゲートを削除できます。
MSDNにいいサンプルがあります:
http://msdn.microsoft.com/ja-jp/library/ms173175(v=VS.80).aspx
ラムダ式は式とステートメントを含めることができる匿名関数であり、デリゲート型または式ツリー型を作成するために使用できます。
ラムダ式はラムダ演算子 => が使用され、この演算子を「~に入力」と理解します。 ラムダ演算子の左辺で入力パラメーターを指定し (ある場合)、右辺には式ブロックまたはステートメント ブロックが入ります。 => 演算子と代入 (=) は優先順位が同じで、結合規則が右から左です。~
ラムダ式 x => x * x は、「x を x * x に入力」と読みます。この式は、次のようにデリゲート型に割り当てることができます。~
delegate int del(int i); static void Main(string[] args) { del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 }
ツリー型を作成するには
Expression<del> myET = x => x * x;
右辺に式があるラムダ式を式形式のラムダと呼びます。 式形式のラムダは、式ツリー (C# および Visual Basic)の構築に幅広く使用されます。~
(input parameters) => expression
(x, y) => x == y
(int x, string s) => s.Length > x
() => SomeMethod()
(input parameters) => {statement;}
delegate void TestDelegate(string s); … TestDelegate myDel = n => { string s = n + " " + "World"; Console.WriteLine(s); }; myDel("Hello");
匿名メソッドと同様、ステートメント形式のラムダを使用して式ツリーを作成することはできません。
e[NȂECir Yahoo yV LINEf[^[Ōz500~`I
z[y[W ̃NWbgJ[h COiq@COsیI COze