C#的委託 Action<>和Func<>

其實他們兩個都是委託【代理】的簡寫形式。html

1、【action<>】指定那些只有輸入參數,沒有返回值的委託性能

Delegate的代碼:代理

[csharp]  htm

public delegate void myDelegate(string str);  blog

public static void HellowChinese(string strChinese)  get

string

    Console.WriteLine("Good morning," + strChinese);  it

    Console.ReadLine();  io

效率

myDelegate d = new myDelegate(HellowChinese); 

d("Mr wang"); 

用了Action以後呢:

[csharp] 

public static void HellowChinese(string strChinese) 

    Console.WriteLine("Good morning," + strChinese); 

    Console.ReadLine(); 

Action<string> action = HellowChinese; 

action("Spring."); 

就是至關於省去了定義委託的步驟了。

2、func<> 這個和上面的那個是同樣的,區別是這個有返回值!

[csharp]  www.2cto.com

public static string HelloEnglish(string strEnglish) 

    return "Hello." + strEnglish; 

Func<string, string> f = HelloEnglish; 

Console.WriteLine(f("Srping ji")); 

Console.ReadLine(); 

 

 

unc,Action 的介紹及其用法

Func是一種委託,這是在3.5裏面新增的,2.0裏面咱們使用委託是用Delegate,Func位於System.Core命名空間下,使用委託能夠提高效率,例如在反射中使用就能夠彌補反射所損失的性能。
Action<T>和Func<T,TResult>的功能是同樣的,只是Action<T>沒有返類型,

Func<T,T,Result>:有參數,有返回類型

Action,則既沒有返回也沒有參數,

Func<T,TResult> 的表現形式分爲如下幾種:

1。Func<T,TResult>

2。Func<T,T1,TResult>

3。Func<T,T1,T2,TResult>

4。Func<T,T1,T2,T3,TResult>

5。Func<T,T1,T2,T3,T4,TResult>

分別說一下各個參數的意義,TResult表示 委託所返回值 所表明的類型, T,T1,T2,T3,T4表示委託所調用的方法的參數類型,

如下是使用示例:

Func<int, bool> myFunc = null;//所有變量

myFunc = x => CheckIsInt32(x); //給委託封裝方法的地方 使用了Lambda表達式

private bool CheckIsInt32(int pars)//被封裝的方法
        {
            return pars == 5;
        }

  bool ok = myFunc(5);//調用委託

MSDN:http://msdn.microsoft.com/zh-cn/library/bb534303(VS.95).aspx

可是若是咱們須要所封裝的方法不返回值,增麼辦呢?就使用Action!

可使用 Action<T1, T2, T3, T4>委託以參數形式傳遞方法,而不用顯式聲明自定義的委託。封裝的方法必須與此委託定義的方法簽名相對應。也就是說,封裝的方法必須具備四個均經過值傳遞給它的參數,而且不能返回值。(在 C# 中,該方法必須返回 void。在 Visual Basic 中,必須經過 SubEnd Sub 結構來定義它。)一般,這種方法用於執行某個操做。

使用方法和Func相似!

MSDN:http://msdn.microsoft.com/zh-cn/library/bb548654(VS.95).aspx

Action:既沒有返回,也沒有參數,使用方式以下:

Action action = null;//定義action

action =  CheckIsVoid;//封裝方法,只須要方法的名字

action();//調用

總結:使用Func<T,TResult>和Action<T>,Action而不使用Delegate其實都是爲了簡化代碼,使用更少的代碼達到相同的效果,不須要咱們顯示的聲明一個委託,Func<T,TResult>的最後一個參數始終是返回類型,而Action<T,TResult>是沒有返回類型的,而Action是沒有返回類型和參數輸入的。

相關文章
相關標籤/搜索