好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 使用.NET中的Action及Func泛型委托深入剖析

使用.NET中的Action及Func泛型委托深入剖析

熱門標簽:太原外呼電銷機器人費用 保山電話外呼管理系統怎么用 外呼系統用員工身份證 電話機器人廣告話術 東莞語音電銷機器人排名 朝陽市地圖標注 蘇州銷售外呼系統預算 使用智能電話機器人違法嗎 淘寶地圖標注如何做

委托,在C#編程中占有極其重要的地位,委托可以將函數封裝到委托對象中,并且多個委托可以合并為一個委托,委托對象則可以像普通對象一樣被存儲、傳遞,之后在任何時刻進行調用,因此,C#中函數回調機制的實現基本上依賴于委托。C#的delegate關鍵字用于聲明委托,它具有將聲明委托類型映射到System.Delegate類的能力,System.Delegate類位于mscorlib.dll中,是.NET的基礎核心類之一。使用delegate關鍵字聲明一個委托,實質上創建了System.Delegate的派生類,因此委托類型并非結構體也不是其它類型,它是一個類。一個委托對象也就是一個類的實例。以下是Delegate類的聲明:

復制代碼 代碼如下:

public abstract class Delegate

Delegate是所以委托類型的基類,C#中的多播委托實際上是MulticastDelegate類,它是System.Delegate的派生類,而本文中介紹的Action、Func泛型委托實際上都是MulticastDelegate類的派生類型。C#中當我們使用delegate關鍵字聲明一個委托類型時,實際上是由C#編譯器根據我們聲明時的方法簽名幫助我們生成一個與簽名匹配的,派生自MulticastDelegate的類。在泛型大量應用之前,我們寫一個C#程序的時候可能會使用delegate關鍵字聲明許多委托類型,因為這些類型都對應于不同的方法簽名。通過Visual Studio的對象瀏覽器查看mscorlib可以看到這兩種重要的泛型委托: 

 

 

 


其中除了Action之外,其它的委托都是泛型的,其實就是一些泛型類。這便是.NET核心庫中全部的泛型委托了。這些泛型委托分為Func、Action中,它們借助于泛型特性,可以替代C#中幾乎所有的委托類型,也就是說一般情況下,在我們的程序中不必再聲明任何新的委托類型,就可以包裝所有的函數了。比如我們有兩個方法:

復制代碼 代碼如下:

public static void OtputString(string str)
{
    Console.WriteLine(str);
}
public static int Add(int a, int b)
{
    return a + b;
}

Func泛型委托與Action相比即多出了一個TResult類型參數,用于函數具有返回值的情況,Action泛型委托用于沒有返回值的函數。當我們要獲得這兩個方法的委托對象時這樣變可以了:
復制代碼 代碼如下:

var action = new Actionstring>(OtputString);
action("OutputString Invoked!");
var func = new Funcint, int, int>(Add);
var sum = func(3, 5);
Console.WriteLine(sum);

可以看見,當我們將具有返回值的函數包裝成委托對象時使用Func委托,如果函數沒有返回值則使用Action,核心庫提供的泛型委托類型參數最短的為0,最長的為8個。因此,Action及其泛型委托可以匹配無返回值、參數數量為0到8的任何函數。同樣的,Func泛型委托可以匹配由返回值、參數數量在0到8個的任何函數。一般情況下,程序中函數的參數數量都不會超過8個,即使超過8個,我們可以聲明新的泛型委托類型來應對
復制代碼 代碼如下:

delegate void ActionT1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7, T8 p8, T9 p9);

使用這些泛型委托不會有任何的性能損失,使得程序中委托的使用風格保持一致。唯一的缺點就是類型的名稱無法表達具體的用途,舉例來講EventHandler委托,我們一看名字就知道這是用于事件處理的委托。而使用Actionobject,EventArgs>委托我們則無法從名稱看出這種類型的委托是何種用途。
泛型委托有替代所有其它委托的能力,到底應該使用泛型委托還是普通委托、何時使用、在哪種情況下用,可能每個人都有不同的簡介,不過說到底,泛型委托能統一程序代碼風格以及隨處方便使用等優點是非常顯著的。

您可能感興趣的文章:
  • 關于C#泛型列表ListT>的基本用法總結
  • C#泛型實例詳解
  • C# 泛型深入理解介紹
  • C#泛型約束的深入理解
  • c#自定義泛型類的實現
  • C# 泛型數組學習小結
  • C#泛型和反射實例解析
  • 淺談c# 泛型類的應用
  • .NET基礎之自定義泛型分析
  • .NET/C#如何判斷某個類是否是泛型類型或泛型接口的子類型詳解

標簽:呼倫貝爾 克拉瑪依 綏化 洛陽 運城 潛江 西藏 阿里

巨人網絡通訊聲明:本文標題《使用.NET中的Action及Func泛型委托深入剖析》,本文關鍵詞  使用,.NET,中的,Action,及,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用.NET中的Action及Func泛型委托深入剖析》相關的同類信息!
  • 本頁收集關于使用.NET中的Action及Func泛型委托深入剖析的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 日本年轻的继坶中文字幕| 欧美性视频在线观看免费| 国产人妻精品一区二区三区不卡| 国产精品第5页| 国产精品黄网站免费进入| 中国国产一级A片| 日韩免费精品| 久久精品国产亚洲7777最新章节| 呦女网站呦女| 男人下面插女人下面| 美女的部位无遮挡| 国产成人综合亚洲亚洲欧美| 超级教师电影免费观看| 国产精品欧美精品videos| 禁欲教授h婚后play| 欧美级特黄AAAA片| 精品国产午夜激无码毛片古装| 榴莲app下载网站进入wym| 泷泽萝拉无码AV精品无删减| 一个人www在线观看高清视频| 长篇高辣h文合集乱公和小莹| aa级一级天堂片免费观看| 继夫调教嗯啊h男男双性| 精品国产乱码久久久软件使用方法 | 男人女人下面很爽视频| japanese人妻推油按摩| 小受被多男摁住—灌浓精| 国产一区二区日韩欧美在线| 美国的毛片免费的| 国产gaysex| 白丝挠脚心丨vk| 久久国产小视频| 狂野小农民二狗在线观看播放电影 | jizz国产丝袜18老师美女| 寡妇大J8又粗又大| 女人18毛片A片免费视频小说| 天堂v网| 极品美女一区二区三区| 老牛嫩草AⅤ一区二区三区 | 草莓ap| 爆?喷水?洗澡?网站|