C#委託

來源:互聯網
上載者:User

標籤:exception   oca   lambda運算式   public   情況   pac   namespace   mes   system   

using System;using static System.Console;//委託 降低耦合//如果一個函數的參數是一個函數//就可以定義一個委託namespace ConsoleApp{    class Program    {        //委託        //可以在類的內部、外部,名字空間 定義委託        //相當於一個函數類型        public delegate void WtiteAString(int i);        public static void fun(int i)        {            WriteLine(i);        }        public static void fun1()        { }        static void Main(string[] args)        {            //複製會重新分配一個方法            WtiteAString write = fun;            write = new WtiteAString(fun);            write(1);                        //Action<T>委託,傳回型別為void            Action<int> op1 = fun;            op1(2);            Action d = fun1;            //Func<T>委託            //單參,表示傳回型別,多參前面表示方法的參數,最後一個表示傳回型別            Func<int, double> op2;            //多播委託,使用+ += - -=            //其調用的順序並未正式定義,所以要避免寫依賴順序調用方法的代碼            op1 += fun;            //如果委託調用的一個方法引發了異常,委託迭代就會停止,不再調用其他方法            //為避免這種情況,應自己迭代方法列表            Action d1 = fun1;            d1 += fun1;            Delegate[] delegates = d1.GetInvocationList();            foreach (Action d2 in delegates)            {                try                {                    d2();                }                catch (Exception)                {                    WriteLine("Exception caught");                }            }            //匿名方法 委託一個現寫的函數            //匿名方法不能使用跳躍陳述式(break goto continue)跳到該匿名方法外部            //不能訪問外部ref、out參數,但可以使用其他的外部變數            string mid = ", middle part,";            Func<string, string> anonDel = delegate (string param)            {                param += mid;                param += " and this was added to the string.";                return param;            };            WriteLine(anonDel("start of string"));            //lambda運算式            Func<string, string> oneParam =                 s2 => $"change uppercase {s2.ToUpper()}"; //s2為參數            WriteLine(oneParam("test"));            //多個參數            Func<double, double, double> twoParams =                (x, y) => x * y;            WriteLine(twoParams(2, 3));        }    }}

 

C#委託

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.