最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中常見的系統(tǒng)內(nèi)置委托用法詳解

 更新時間:2014年09月06日 08:53:36   投稿:shichen2014  
這篇文章主要介紹了C#中常見的系統(tǒng)內(nèi)置委托用法,主要包括了Action類的委托、Func類的委托、Predicate<T>委托、Comparison<T>委托等,需要的朋友可以參考下

一般來說,C#在公共語言運行時(CLR)環(huán)境中系統(tǒng)為我們內(nèi)置了一些常用的委托,包括Action類的委托、Func類的委托、Predicate<T>委托、Comparison<T>委托等等。以上這些委托的命名空間都是System,所屬程序集都是 mscorlib.dll,今天本文就來講一講這些委托的使用方法。

就像我們自己已定義好的一樣,要實現(xiàn)某些功能,我們可以直接利用系統(tǒng)內(nèi)置委托,實例化它們,而不必顯式定義一個新委托并將命名方法分配給該委托。如:

public static void Test()
{
  Console.WriteLine("Just For Test");
}
static void Main(string[] args)
{
  Action a = new Action(Test); //直接實例化一個Action委托,不用自己再定義新委托
  a();
}

只要了解了該系統(tǒng)內(nèi)置委托是干什么的,傳什么參數(shù),返回什么值,大家就可以仿上述例子自行調(diào)用,不再贅述。下面是我對這四類委托的總結(jié),并附有結(jié)合匿名方法與Lambda表達式的范例,兩種方法實現(xiàn)的結(jié)果一樣,大家可舉一反三,靈活運用。

一、Action類的委托

1.Action委托 封裝一個方法,該方法不具有參數(shù)并且不返回值

2.Action<T>委托 封裝一個方法,該方法只有一個參數(shù)并且不返回值

3.Action<T1,T2>委托 封裝一個方法,該方法具有兩個參數(shù)并且不返回值

…… ……

17.Action<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>委托 封裝一個方法,該方法具有16個參數(shù)并且不返回值

下面以Action<T>委托為例,示范如何使用Action類的委托,該類委托僅僅是參數(shù)個數(shù)上有區(qū)別而已。

static void Main(string[] args)
{
  #region Action<T>委托示例
  //需求:打印出整型集合list的元素
  List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
  //將匿名方法分配給 Action<T> 委托實例
  Action<int> concat1 = delegate(int i) { Console.WriteLine(i); };
  list.ForEach(concat1);
  //將 lambda 表達式分配給 Action<T> 委托實例
  Action<int> concat2 = (i => Console.WriteLine(i));
  list.ForEach(concat2);
  Console.ReadKey();
  #endregion 
}

總結(jié):

Action類的委托最少可以傳入0個參數(shù),最多可以傳入16個參數(shù),參數(shù)類型皆為逆變,并且不返回值。

二、Func類的委托

1.Func(TResult)委托封裝封裝一個不具有參數(shù)但卻返回 TResult 參數(shù)指定的類型值的方法

2.Func(T,TResult)委托 封裝一個具有一個參數(shù)并返回 TResult 參數(shù)指定的類型值的方法

3.Func(T1,T2,TResult)委托 封裝一個具有兩個參數(shù)并返回 TResult 參數(shù)指定的類型值的方法

…… ……

17.Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,TResult>委托 封裝一個方法,該方法具有16個參數(shù),并返回TResult參數(shù)所指定的類型的值

下面以Func<T,TResult>委托為例,示范如何使用Func類的委托,該類委托僅僅是參數(shù)個數(shù)上有區(qū)別而已。

static void Main(string[] args)
{
  #region Func<T,TResult>委托示例
  //需求:查找整型集合list中大于3的所有元素組成的新集合,并打印出集合元素
  List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
  //將匿名方法分配給 Func<T,TResult> 委托實例
  Func<int, bool> concat1 = delegate(int i) { return i > 3; };
  var newlist1 = list.Where(concat1).ToList();
  //將 Lambda 表達式分配給 Func<T,TResult> 委托實例
  Func<int, bool> concat2 = i => i > 3;
  var newlist2 = list.Where(concat2).ToList();
  newlist1.ForEach(i => Console.WriteLine(i.ToString()));
  newlist2.ForEach(i => Console.WriteLine(i.ToString()));
  Console.ReadKey();
  #endregion
}

總結(jié):

Func類的委托最少可以傳入輸入泛型參數(shù)(in,逆變) 1個,最多可以傳入輸入泛型參數(shù)(in,逆變) 16個,傳入的輸出泛型參數(shù)(out,協(xié)變)有且只有一個,這個類型是此委托封裝的方法的返回值類型。

三、Predicate<T>委托

表示定義一組條件并確定指定對象是否符合這些條件的方法

下面給出Predicate<T>委托的范例:

static void Main(string[] args)
{
  #region Predicate<T>委托示例
  //需求:查找整型集合list中大于3的所有元素組成的新集合,并打印出集合元素
  List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
  //將匿名方法分配給 Predicate<T> 委托實例
  Predicate<int> concat1 = delegate(int i) { return i > 3; };
  var newlist1 = list.FindAll(concat1);
  //將 lambda 表達式分配給 Predicate<T> 委托實例
  Predicate<int> concat2 = (c => c > 3);
  var newlist2 = list.FindAll(concat2);
  newlist1.ForEach(i => Console.WriteLine(i));
  newlist2.ForEach(i => Console.WriteLine(i));
       Console.ReadKey();
  #endregion
}

總結(jié):

Predicate<T>委托封裝一個方法,該方法傳入一個類型參數(shù),這個參數(shù)是指要比較的對象的類型,此類型參數(shù)是逆變,同時接收一個參數(shù)(該參數(shù)就是要按照由此委托表示的方法中定義的條件進行比較的對象,參數(shù)的類型就是傳入的類型參數(shù)的類型),該方法始終返回bool類型的值。如果該對象符合由此委托表示的方法中定義的條件,則為 true;否則為 false。

四、Comparison<T>委托

表示比較同一類型的兩個對象的方法

下面給出Comparison<T>委托的范例:

static void Main(string[] args)
{
  #region Comparison<T>委托示例
  //需求:將整型集合list中的所有元素倒序排列打印出來
  List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
  //將匿名方法分配給 Comparison<T> 委托實例
  Comparison<int> concat1 = delegate(int i, int j) { return j - i; };
  //將 lambda 表達式分配給 Comparison<T> 委托實例
  Comparison<int> concat2 = (i, j) => j - i;
  list.Sort(concat1);
  list.ForEach(c => Console.WriteLine(c.ToString()));
  list.Sort(concat2);
  list.ForEach(c => Console.WriteLine(c.ToString()));
       Console.ReadKey();
  #endregion
}

 總結(jié):

Comparison<T>委托封裝一個方法,該方法傳入一個類型參數(shù),這個參數(shù)是指要比較的對象的類型,此類型參數(shù)是逆變,同時接收兩個同類型的參數(shù)(這兩個參數(shù)就是要比較的兩個對象,參數(shù)的類型就是傳入的類型參數(shù)的類型),始終返回int類型的值,即一個有符號整數(shù),指示 x 與 y 的相對值,如下表所示。

含義
小于0 x 小于y 
0 x 等于y 
大于0 x 大于y 
希望本文所述對大家的C#程序設(shè)計有所幫助。

相關(guān)文章

  • C#獲取遠程XML文檔的方法

    C#獲取遠程XML文檔的方法

    這篇文章主要介紹了C#獲取遠程XML文檔的方法,涉及C#文件傳輸與XML文檔操作相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • C#將時間轉(zhuǎn)成文件名使用方法

    C#將時間轉(zhuǎn)成文件名使用方法

    C#將時間轉(zhuǎn)成文件名用到的是DateTime類的ToFileTime方法,下面看使用方法吧
    2014-01-01
  • Untiy Shader實現(xiàn)紋理貼圖滾動

    Untiy Shader實現(xiàn)紋理貼圖滾動

    這篇文章主要為大家詳細介紹了Untiy Shader實現(xiàn)紋理貼圖滾動,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 在 C# 中使用 Span<T> 和 Memory<T> 編寫高性能代碼的詳細步驟

    在 C# 中使用 Span<T> 和 Memory<

    在本文中,將會介紹 C# 7.2 中引入的新類型:Span 和 Memory,文章深入研究?Span<T>?和?Memory<T>?,并演示如何在 C# 中使用它們,需要的朋友可以參考下
    2022-08-08
  • C#多線程與異步的區(qū)別詳解

    C#多線程與異步的區(qū)別詳解

    多線程和異步操作兩者都可以達到避免調(diào)用線程阻塞的目的,從而提高軟件的可響應(yīng)性。甚至有些時候我們就認為多線程和異步操作是等同的概念。但是,多線程和異步操作還是有一些區(qū)別的。而這些區(qū)別造成了使用多線程和異步操作的時機的區(qū)別
    2017-06-06
  • C# DateTime與時間戳轉(zhuǎn)換實例

    C# DateTime與時間戳轉(zhuǎn)換實例

    本篇文章主要介紹了C# DateTime與時間戳轉(zhuǎn)換實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • C#發(fā)送和接收HTTP請求類HttpWebRequest的用法

    C#發(fā)送和接收HTTP請求類HttpWebRequest的用法

    這篇文章主要給大家介紹了關(guān)于C#發(fā)送和接收HTTP請求類HttpWebRequest用法的相關(guān)資料,C#中的HttpWebRequest是一個用于發(fā)送HTTP請求的類,它可以用于向Web服務(wù)器發(fā)送GET、POST、PUT、DELETE等請求,需要的朋友可以參考下
    2024-06-06
  • Unity實戰(zhàn)之制作動畫編輯器

    Unity實戰(zhàn)之制作動畫編輯器

    為了更方便地為UI視圖添加動畫,將動畫的編輯功能封裝在了UI View類中,可以通過編輯器快速的為視圖編輯動畫。本文將通過Unity制作一個動畫編輯器,需要的可以參考一下
    2022-02-02
  • Unity實現(xiàn)虛擬搖桿

    Unity實現(xiàn)虛擬搖桿

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)虛擬搖桿,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#實現(xiàn)打開指定目錄和指定文件的示例代碼

    C#實現(xiàn)打開指定目錄和指定文件的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)打開指定目錄、打開指定目錄且選中指定文件、打開指定文件,感興趣的小伙伴可以嘗試一下
    2022-06-06

最新評論

普宁市| 盱眙县| 改则县| 克东县| 大英县| 铜梁县| 建宁县| 绥江县| 通榆县| 四会市| 韶关市| 敦煌市| 铁岭市| 大连市| 兖州市| 永嘉县| 三门县| 上虞市| 松滋市| 东明县| 禹城市| 仁化县| 鲁山县| 和林格尔县| 色达县| 湘乡市| 岢岚县| 小金县| 平罗县| 曲麻莱县| 永平县| 拜城县| 夏津县| 张北县| 晋宁县| 睢宁县| 榕江县| 长治市| 随州市| 二连浩特市| 错那县|