C#基礎——Func和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 中,必須通過 Sub…End 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>是沒有返回類型的,而Action是沒有返回類型和參數輸入的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM