委託---->匿名錶達式--->lambda表達式;這是一個進化的過程。
委託:就是用委託代替一個方法,實例化爲一個類,就可以作爲參數來使用。可進行+、-
MSDN:
public delegate void Del(string message);
// Create a method for a delegate. public static void DelegateMethod(string message) { System.Console.WriteLine(message); }
Del handler = DelegateMethod; // Call the delegate. handler("Hello World");
匿名方法:在委託的基礎上,不用在寫命名方法。直接給委託寫上方法。
MSDN:
// Create a delegate.delegatevoid Del(int x); // Instantiate the delegate using an anonymous method. Del d = delegate(int k) { /* ... */ }; Lambda:用表達式的形式使用匿名方法。先聲明一個委託類,創建一個委託變量,對其進行賦值。可以說是變量和函數的結合吧。 MSDN:
delegate int del(int i); static void Main(string[] args) { del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 }
//a Test
delegate bool D(); delegate bool D2(int i); class Test { D del; D2 del2; public void TestMethod(int input) { int j = 0; // Initialize the delegates with lambda expressions. // Note access to 2 outer variables. // del will be invoked within this method. del = () => { j = 10; return j > input; }; // del2 will be invoked after TestMethod goes out of scope. del2 = (x) => {return x == j; }; // Demonstrate value of j: // Output: j = 0 // The delegate has not been invoked yet. Console.WriteLine("j = {0}", j); // Invoke the delegate. bool boolResult = del(); // Output: j = 10 b = True Console.WriteLine("j = {0}. b = {1}", j, boolResult); } static void Main() { Test test = new Test(); test.TestMethod(5); // Prove that del2 still has a copy of // local variable j from TestMethod. bool result = test.del2(10); // Output: True Console.WriteLine(result); Console.ReadKey(); } }