C#中Action和Func學習筆記
阿新 • • 發佈:2021-01-25
C#中Action和Func學習筆記
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Action和Func
{
class Program
{
static void Main(string[] args)
{
ActionAndFuncShow();
Console. ReadKey();
}
static void ActionAndFuncShow()
{
Console.WriteLine("Action");
//Action 沒有返回值的委託,引數可以從0到16個的泛型委託
Action action1 = () => { };
action1();
Action<int> action2 = i => Console. WriteLine(i);
action2(2);
Action<int, string> action3 = (i, s) => Console.WriteLine($"i={i} s={s}");
action3(2, "222");
Console.WriteLine("Func");
//Func 帶返回值的委託
Func<int> func1 = () = > 1;//int型別返回值
Console.WriteLine(func1());
Func<int, string> func2 = i => i.ToString();//string型別返回值
Console.WriteLine(func2(2));
Func<int, string, DateTime> func3 = (i, s) => DateTime.Now;//DateTime型別返回值
Console.WriteLine(func3(3,"3"));
//Func的最後一個引數是返回值
DoNothing(action1);
NoReturnNoPara method = () => { };
//DoNothing(method);Action和NoReturnNoPara雖然都是無引數無返回值型別,但是他們兩個是獨立的例項,所以無法這樣使用
//為什麼會有Action和Func
//很多委託長得一樣,引數列表,返回值型別都一樣,但不能通用,
//在不同框架元件定義各種各樣的相同委託,就是浪費,
//為了統一,就全部使用了標準的Action和Func
}
public delegate void NoReturnNoPara();
private static void DoNothing(Action act)
{
act.Invoke();
}
}
}