国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#:委托(delegate)

2019-11-17 02:59:31
字體:
來源:轉載
供稿:網友

C#:委托(delegate)

一、委托(delegate):是類型安全的方法的引用。在定義委托的時候就確定了該委托所代表的方法的參數簽名和返回數據類型,因此委托是類型安全的,這一點是與指針完全不同的。

委托的使用方法與類基本相同,委托的使用分三步:1、委托聲明;2、委托實例化;3、委托調用。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; using System.Collections;namespace Consoleapplication{    class PRogram    {        delegate string GetString();
static void  Main(string[] args)        {             string str="HelloWorld";             GetString dlg=new GetString(str.ToString);             Console.WriteLine("str.ToString():".PadRight(20) + str.ToString());             Console.WriteLine("dlg:".PadRight(20) + dlg);             Console.WriteLine("dlg():".PadRight(20) + dlg());                   Console.ReadKey();        }    }}

image

關于委托需要注意以下幾點:

①方法綁定委托時用的是方法的名稱,也就是不能帶括號的;

②調用委托必須帶括號;

二、Action<T> and Func<T> Delegates

這是兩種特殊的泛型委托,Action<T> 是沒有返回值的委托,可以最少包含0個參數,最多包含16個參數;Func<T> 是帶有返回值的委托,其中最后一個類型參數就是返回值的類型,可以最少包含0個參數和一個返回值,最多包含16個參數和一個返回值。

例如:Action<int,string>

該委托所代表的方法具有兩個參數,且第一個參數類型是int類型,第二個參數類型是string類型,沒有返回值。

Func<int,string>

該委托所代表的方法具有一個參數,且該參數的數值類型是int類型,具有返回值,且返回值類型是string類型。

三、多路廣播委托(Multicast Delegates)

一個委托實例可以綁定單個方法,也可以綁定多個方法。綁定單個方法的委托稱為單路廣播委托(Singlecast Delegetes),綁定多個方法的委托稱為多路廣播委托(Multicast Delegates)。

委托支持+,-,+=,-=運算符,所以兩個委托可以直接進行加減運算生成新的多路廣播委托。+運算或者+=運算就是將新的方法綁定到委托,-運算或者-=就是將方法與委托解除綁定。多路廣播委托綁定的方法的執行順序與方法綁定到委托的順序相同,但是在執行過程中,如果某個方法拋出異常,那么之后的方法將都不能被執行。如果你希望在委托綁定的方法執行過程中,即使出現異常,之后的方法也能順利執行,可以使用GetInvocationList()方法,順序執行方法,并且捕獲異常。例如下面這個例子:

        static void Main()        {            Action d1 = One;            d1 += Two;            Delegate[] delegates = d1.GetInvocationList();            foreach (Action d in delegates)            {                try                {                    d();                }                catch (Exception)                {                    Console.WriteLine("Exception caught");                }            }            Console.ReadKey();        }        static void One()        {            Console.WriteLine("One");            throw new Exception("Error in one");        }        static void Two()        {            Console.WriteLine("Two");        }

image


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乳山市| 大化| 秀山| 腾冲县| 达州市| 孟津县| 津市市| 霍林郭勒市| 乌鲁木齐县| 邹城市| 河间市| 泗阳县| 九江市| 龙泉市| 锡林郭勒盟| 平度市| 海丰县| 孝昌县| 宜都市| 板桥市| 新竹县| 盐津县| 江城| 文山县| 清水河县| 九江市| 乐陵市| 淮南市| 新乡县| 柯坪县| 偏关县| 巴东县| 邵阳市| 临猗县| 页游| 姜堰市| 苏州市| 九龙城区| 嘉兴市| 闸北区| 商河县|