簡介 從C# 3.0起很少需要自己聲明委托。System.Func 是一個泛型委托,它可以表示帶有返回值的方法。它可以接受一個到多個輸入參數,並返回一個指定類型的結果。System.Func 委托的最後一個類型參數表示方法的返回值類型。而System.Action系列代表返回void的方法。 Fun ...
簡介
從C# 3.0起很少需要自己聲明委托。System.Func
是一個泛型委托,它可以表示帶有返回值的方法。它可以接受一個到多個輸入參數,並返回一個指定類型的結果。System.Func
委托的最後一個類型參數表示方法的返回值類型。而System.Action
系列代表返回void的方法。
Func委托
說明
Func委托有很多種形式,如下所示:
這裡以Func<T,TResult>為例說明該委托的用法。
原型如下所示:
public delegate TResult Func<in T,out TResult>(T arg);
結合前面文章委托(一)中對於委托類型的圖解:
那麼這個內置泛型委托的圖解如下:
示例
依據前面的文章委托(一)中使用委托的步驟來說明這個內置泛型委托的用法:
由於這個是內置的泛型委托,包含在System.Runtime.dll
程式集中,不是自定義的委托類型,因此不需要自己聲明這個委托類型,而是聲明這個泛型委托變數:
Func<string, string> selector;
然後創建委托實例,並添加第一個方法:
selector= str => str.ToUpper();
這裡使用了lambda表達式,以後再進行解釋。這裡將聲明委托變數與實例化分開了,一般可以將這兩個步驟合併,如下所示:
Func<string, string> selector = str => str.ToUpper();
這個委托對象的圖解如下所示:
調用這個委托對象:
string[] words = { "orange", "apple", "Article", "elephant" };
IEnumerable<String> aWords = words.Select(selector);
foreach (String word in aWords)
Console.WriteLine(word);
結果如下所示:
其實也可以直接在select中直接寫一個lambda表達式,這種方式更常見:
string[] words = { "orange", "apple", "Article", "elephant" };
IEnumerable<String> aWords = words.Select(x => x.ToUpper());
foreach (String word in aWords)
Console.WriteLine(word);
輸出結果如下所示:
其實是一樣的。
查看select方法說明:
它的參數類型就是一個參數類型為string返回值類型為string的內置func委托類型。
Lambda表達式的類型是由編譯器隱式推斷的,它通常表示為委托類型或表達式樹類型,具體取決於上下文。最常見的用法是將Lambda表達式賦值給委托類型或傳遞給接受委托類型參數的方法。
以上就是C#中的內置泛型委托func的介紹與用法示例,希望對你有所幫助。
Action委托
Action委托也有很多形式,如下所示:
本文以Action<T>這種形式來說明C#中內置的泛型Action委托的用法。
該委托類型的原型如下所示:
public delegate void Action<in T>(T obj);
它的圖解如下所示:
示例
聲明委托類型的變數:
Action<string> action;
實例化該委托變數,即為委托添加方法:
void showMessage(string message)
{
Console.WriteLine(message);
}
action = showMessage;
但是一般可以合為一步:
Action<string> action = showMessage;
void showMessage(string message)
{
Console.WriteLine(message);
}
調用委托:
string[] words = { "orange", "apple", "Article", "elephant" };
foreach(var word in words)
{
action(word);
}
輸出結果如下所示:
但是可以發現我們的代碼寫的還不構簡潔,用到了另外聲明的方法,其實可以用Lambda表達式來寫方法,不需要自己另外寫:
static void Main(string[] args)
{
Action<string> action = (x) =>
{
Console.WriteLine(x);
};
string[] words = { "orange", "apple", "Article", "elephant" };
foreach(var word in words)
{
action(word);
}
}
輸出結果如下所示:
以上就是C#中的內置泛型委托Action的介紹與用法示例,希望對你有所幫助。
ref