欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

一、Action類的委托

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

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

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

…… ……

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

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

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

總結(jié):

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

二、Func類的委托

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

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

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

…… ……

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

下面以Func<T,TResult>委托為例,示范如何使用Func類的委托,該類委托僅僅是參數(shù)個(gè)數(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> 委托實(shí)例
  Func<int, bool> concat1 = delegate(int i) { return i > 3; };
  var newlist1 = list.Where(concat1).ToList();
  //將 Lambda 表達(dá)式分配給 Func<T,TResult> 委托實(shí)例
  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個(gè),最多可以傳入輸入泛型參數(shù)(in,逆變) 16個(gè),傳入的輸出泛型參數(shù)(out,協(xié)變)有且只有一個(gè),這個(gè)類型是此委托封裝的方法的返回值類型。

三、Predicate<T>委托

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

下面給出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> 委托實(shí)例
  Predicate<int> concat1 = delegate(int i) { return i > 3; };
  var newlist1 = list.FindAll(concat1);
  //將 lambda 表達(dá)式分配給 Predicate<T> 委托實(shí)例
  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>委托封裝一個(gè)方法,該方法傳入一個(gè)類型參數(shù),這個(gè)參數(shù)是指要比較的對(duì)象的類型,此類型參數(shù)是逆變,同時(shí)接收一個(gè)參數(shù)(該參數(shù)就是要按照由此委托表示的方法中定義的條件進(jìn)行比較的對(duì)象,參數(shù)的類型就是傳入的類型參數(shù)的類型),該方法始終返回bool類型的值。如果該對(duì)象符合由此委托表示的方法中定義的條件,則為 true;否則為 false。

四、Comparison<T>委托

表示比較同一類型的兩個(gè)對(duì)象的方法

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

static void Main(string[] args)
{
  #region Comparison<T>委托示例
  //需求:將整型集合list中的所有元素倒序排列打印出來(lái)
  List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
  //將匿名方法分配給 Comparison<T> 委托實(shí)例
  Comparison<int> concat1 = delegate(int i, int j) { return j - i; };
  //將 lambda 表達(dá)式分配給 Comparison<T> 委托實(shí)例
  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>委托封裝一個(gè)方法,該方法傳入一個(gè)類型參數(shù),這個(gè)參數(shù)是指要比較的對(duì)象的類型,此類型參數(shù)是逆變,同時(shí)接收兩個(gè)同類型的參數(shù)(這兩個(gè)參數(shù)就是要比較的兩個(gè)對(duì)象,參數(shù)的類型就是傳入的類型參數(shù)的類型),始終返回int類型的值,即一個(gè)有符號(hào)整數(shù),指示 x 與 y 的相對(duì)值,如下表所示。

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

相關(guān)文章

  • C#調(diào)用Python程序傳參數(shù)獲得返回值

    C#調(diào)用Python程序傳參數(shù)獲得返回值

    C# 調(diào)用 Python 程序有多種方式,本文主要介紹了4種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • c# 播放聲音的四種方法

    c# 播放聲音的四種方法

    這篇文章主要介紹了c# 播放聲音的四種方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-11-11
  • C#二維碼圖片識(shí)別代碼

    C#二維碼圖片識(shí)別代碼

    這篇文章主要為大家詳細(xì)介紹了C#二維碼圖片識(shí)別代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C# 讀寫自定義的Config文件的實(shí)現(xiàn)方法

    C# 讀寫自定義的Config文件的實(shí)現(xiàn)方法

    本文主要介紹了C# 讀寫自定義的Config文件的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#中this的使用實(shí)例分析

    C#中this的使用實(shí)例分析

    這篇文章主要介紹了C#中this的使用方法,this是C#程序設(shè)計(jì)中非常重要的一個(gè)關(guān)鍵字,本文以實(shí)例形式對(duì)此作出簡(jiǎn)單的用法分析,需要的朋友可以參考下
    2014-08-08
  • C#實(shí)現(xiàn)日期時(shí)間的格式化輸出的示例詳解

    C#實(shí)現(xiàn)日期時(shí)間的格式化輸出的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)日期時(shí)間的格式化輸出的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-03-03
  • C#實(shí)現(xiàn)系統(tǒng)休眠或靜止休眠的方法

    C#實(shí)現(xiàn)系統(tǒng)休眠或靜止休眠的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)系統(tǒng)休眠或靜止休眠的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • C#讀寫Config配置文件案例

    C#讀寫Config配置文件案例

    這篇文章介紹了C#讀寫Config配置文件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#對(duì)桌面應(yīng)用程序自定義鼠標(biāo)光標(biāo)

    C#對(duì)桌面應(yīng)用程序自定義鼠標(biāo)光標(biāo)

    這篇文章介紹了C#對(duì)桌面應(yīng)用程序自定義鼠標(biāo)光標(biāo)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • c#圖像截取實(shí)例

    c#圖像截取實(shí)例

    這篇文章主要介紹了c#圖像截取實(shí)例,是Windows桌面應(yīng)用程序設(shè)計(jì)中一個(gè)非常實(shí)用的技巧,本文實(shí)例中備有較為詳細(xì)的注釋便于理解,需要的朋友可以參考下
    2014-10-10

最新評(píng)論