C#泛型委託與Lambda總結
阿新 • • 發佈:2019-01-09
命名方法委託
匿名方法委託class MyDelegateTest { //步驟1,宣告delegate物件 public delegate void MyDelegate(string name); //// 這是我們欲傳遞的方法,它與MyDelegate具有相同的引數和返回值型別 public static void MyDelegateMethod(string name) { Console.WriteLine("Hello,{0}", name); } public static void Main() { // 步驟2,建立delegate物件 MyDelegate md = new MyDelegate(MyDelegateTest.MyDelegateMethod); // 步驟3,呼叫delegate md("Michael"); Console.ReadLine(); } }
Lambda表示式class AnonymousDelegate { private delegate void MyDelegate(string name); public static void Main() { MyDelegate myDelegate = delegate(string name) { Console.WriteLine(name); }; myDelegate("Michael"); Console.ReadLine(); } }
Lambda表示式是C#3.0的一種新語法,語法簡潔為編寫匿名方法提供了更簡明的函式式的句法.
使用Lambda表示式更簡潔,為什麼那麼簡潔.其實是編譯器為我們做了很多事情. MyDelegate myDelegate = (name) => { Console.WriteLine(name); }; 這句話編譯器在編譯的時候會為我們生成一個私有的靜態方法.透過ILDASM可以看到。class LambdaTest { private delegate void MyDelegate(string name); public static void Main() { //匿名委託 MyDelegate myDelegate = (name) => { Console.WriteLine(name); }; //呼叫委託 myDelegate("Michael"); Console.ReadLine(); } }