1. 程式人生 > >C#泛型委託與Lambda總結

C#泛型委託與Lambda總結

命名方法委託

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();
        }
}
匿名方法委託
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表示式
Lambda表示式是C#3.0的一種新語法,語法簡潔為編寫匿名方法提供了更簡明的函式式的句法. 
class LambdaTest
{
        private delegate void MyDelegate(string name);
        public static void Main()
        {
            //匿名委託
            MyDelegate myDelegate = (name) => { Console.WriteLine(name); }; 

            //呼叫委託
            myDelegate("Michael");

            Console.ReadLine();
        }
}
使用Lambda表示式更簡潔,為什麼那麼簡潔.其實是編譯器為我們做了很多事情.  MyDelegate myDelegate = (name) => { Console.WriteLine(name); }; 這句話編譯器在編譯的時候會為我們生成一個私有的靜態方法.透過ILDASM可以看到。