この記事では主に C# デリゲーションと匿名デリゲーションの関連情報を詳しく紹介します。興味のある方は参考にしてください。ライフ』ですが、コミッショニング部分だけで書いている内容が多いので、ラムダ式に関する内容は分けて後ほど書きます。
ラムダ式を誰が発明したのかは知りませんが、私がラムダ式に初めて触れたのは VS2008 を使用していたときだったということだけを覚えているので、まず Microsoft によって発明されたと考えてみましょう。
ラムダ式に出会って以来、ラムダ式はますます人気が高まっており、現在は Java 8 でサポートされており、kotlin は C# と F# を広範囲にコピーしています (かつては C# も Java を同じように扱っていませんでした)。 。実際、これはラムダ式の重要性を十分に示しています。 Lambda を理解するには、まず委任について理解する必要があります。
委任:今、2 つの整数を処理するプログラムを開発したいとします (加算演算が最初に処理されると仮定します)
public class Worker { /// <summary> /// 处理两个数 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public int HandleTwoNumber(int a,int b) { return a + b; } } static void Main(string[] args) { int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); Worker worker = new Worker(); int result = worker.HandleTwoNumber(a, b); Console.WriteLine(String.Format("Result:{0}", result)); string p = Console.ReadLine(); }
public class Worker { public int HandleTwoNumber(int a,int b) { return a - b; } }
public class Worker { public delegate int TwoNumberHandleMethodDelegate(int x, int y); public int HandleTwoNumber(int a,int b) { return a + b; } }
このようにして、Worker コードは次のように変更できます:
public class Worker { public delegate int TwoNumberHandleMethodDelegate(int x, int y); public int HandleTwoNumber(int a, int b, TwoNumberHandleMethodDelegate handle) { return handle(a, b); } }
private static int Add(int a, int b) { return a + b; } private static int Sub(int a, int b) { return a - b; } static void Main(string[] args) { int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); Worker.TwoNumberHandleMethodDelegate method = new Worker.TwoNumberHandleMethodDelegate(Add); Worker worker = new Worker(); int result = worker.HandleTwoNumber(10, 10,method); //int result = worker.HandleTwoNumber(10, 10, Sub);//简化版 Console.WriteLine(String.Format("Result:{0}", result)); }
デリゲート変数に値を割り当てる標準的な方法に加えて、次のように簡略化することもできます。
Worker.TwoNumberHandleMethodDelegate method = new Worker.TwoNumberHandleMethodDelegate(Add); Worker worker = new Worker(); int result = worker.HandleTwoNumber(10, 10,method); //可简化为 // int result = worker.HandleTwoNumber(10, 10,Add);
上記のコード例を通して、TwoNumberHandleMethodDelegate メソッド変数に値 Add(Sub) が割り当てられていることが簡単にわかります。そのため、method(...) を呼び出すときは、Add(..) を呼び出すことと同じです。 ...) 。このように
メソッドとAddは全く同等であると考えられますので、Addの定義内容をメソッド変数に直接代入することはできるのでしょうか?答えは「はい」です:
static void Main(string[] args) { Worker.TwoNumberHandleMethodDelegate method =private static int Add(int a, int b) { return a + b; }; }
static void Main(string[] args) { Worker.TwoNumberHandleMethodDelegate method = (int a, int b) { return a + b; }; }
static void Main(string[] args) { Worker.TwoNumberHandleMethodDelegate method = delegate(int a, int b) { return a + b; }; }
上記の定義から、デリゲートでマークされた簡易メソッドには、Add/Sub のような固定の名前がないことがわかります。したがって、このメソッドを匿名委任と呼びます (私はこれを匿名メソッドと呼ぶことに慣れています)。
また、匿名デリゲートが定義された後は、Main コード ブロック内のローカル変数メソッドに割り当てられるため、メソッドのスコープを超えるとメソッドが呼び出されないことにも注意してください。これにより、匿名メソッド、匿名デリゲート、および匿名関数が最も一般的に使用され、一度だけ使用する必要がある関数コードを定義することになります。
以上がC# の委任と匿名委任の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。