はじめに
前回は,
前回に比べると,
ラムダ式 (Lambda expressions)
C#3.
okButton.Click += (sender, e) => this.Method();
C#2.
okButton.Click += delegate(object sender, EventArgs e) {
this.Method();
};
上記はokButtonオブジェクトのClickイベントハンドラを,
上記の2つコードを見比べると,
上記はイベントハンドラにラムダ式を用いた例で比較をしましたが,
サンプルコード
次のコードは,
それぞれが,
private void Plus() {
foreach(var x in this.Collection) {
x.Result = x.Value1 + x.Value2; // 足し算
Console.WriteLine(x.Result);
}
private void Subtract() {
foreach(var x in this.Collection) {
x.Result = x.Value1 - x.Value2; // 引き算
Console.WriteLine(x.Result);
}
}
private void Multiply() {
foreach(var x in this.Collection) {
x.Result = x.Value1 * x.Value2; // 掛け算
Console.WriteLine(x.Result);
}
}
private void Divide() {
foreach(var x in this.Collection) {
x.Result = x.Value1 / x.Value2; // 割り算
Console.WriteLine(x.Result);
}
}
4つのメソッドは,
これを実現する方法として,
デリゲートによる処理
以下のコードは,
なお,
private void Plus() {
this.Calculate(this.CalcAdd); // 計算を委譲するメソッド
}
// 共通計算メソッド
private void Calculate(Func<int, int, int> func) {
foreach(var x in this.Collection) {
x.Result = func(x.Value1, x.Value2); // 計算を委譲
Console.WriteLine(x.Result);
}
}
// 委譲されたメソッド
private int CalcAdd(int a, int b) {
return a + b; // 足し算
}
Plusメソッドでは,
共通計算メソッドのFunc<int, int, int>デリゲート型のfuncが,
委譲するメソッドは,
Func<>は,
private int Calc(int a, int b) {}
つまりFunc<>には,
なお,
匿名メソッドを用いた処理
次に,
public void Plus() {
this.Calculate(
delegate(int a, int b) { // 匿名メソッド
return a + b;
}
);
}
Calculateメソッドの引数に,
ここでは,