Func 委派的用法
https://dotblogs.com.tw/brooke/2014/08/02/146142
摘要:Func 委派的用法
一、
1.委派的範例為
using System;
//宣告一個委派型別為ConvertMethod,
//並規範入為string型別,輸出為string型別
delegate string ConvertMethod(string inString);
public class DelegateExample
{
public static void Main()
{
// Instantiate delegate to reference UppercaseString method
// 將委派型別ConvertMethod的實體去參考UppercaseString方法
ConvertMethod aConvertMeth = UppercaseString;
string name = "Dakota";
// Use delegate instance to call UppercaseString method
Console.WriteLine(aConvertMeth(name));
}
private static string UppercaseString(string inputString)
{
return inputString.ToUpper();
}
}
2.不用明確定義委派方法,以Func來簡化程式碼為
using System;
public class GenericFunc
{
public static void Main()
{
// Instantiate delegate to reference UppercaseString method
//Func<in T, out TResult>
Func<string, string> aConvertMethod = UppercaseString;
string name = "Dakota";
// Use delegate instance to call UppercaseString method
Console.WriteLine(aConvertMethod(name));
Console.ReadKey();
}
private static string UppercaseString(string inputString)
{
return inputString.ToUpper();
}
}
3.使用匿名方法
using System; public class Anonymous { public static void Main() { Func<string, string> convert = delegate(string s){ return s.ToUpper();}; string name = "Dakota"; Console.WriteLine(convert(name)); } }
4.使用Lambda運算式
using System; public class Anonymous { public static void Main() { Func<string, string> convert = s => s.ToUpper(); string name = "Dakota"; Console.WriteLine(convert(name)); } }
二、
若要參考有一個參數並傳回 void (在 Visual Basic 中是宣告為 Sub 而非 Function) 的方法,
可使用泛型 Action<T> 委派代替。
using System;
public class GenericFunc
{
public static void Main()
{
Action<string> aConvertMethod = UppercaseString;
string name = "Dakota";
aConvertMethod(name);
Console.ReadKey();
}
private static void UppercaseString(string inputString)
{
Console.WriteLine(inputString.ToUpper());
}
}
三、
Action<T>泛型的委派型別,也是跟Func一樣,只是回傳值為void。
每個Func委派型別的簽章,傳入的參數會是零到四,而最後一個的型別參數是代表回傳型別。
例如:Func<string,int>,代表傳入型別為string而回型別為int。
沒有留言:
張貼留言