Delegate、Action、Func
Delegate
delegate int TestDelegate();
创建一个委托实例实质上是创建一个方法的引用,创建实例时关键是要明白TestDelegate没有任何构造器,它有一个隐式的构造函数来构造一个与它相同签名的方法(没有传入参数,返回一个整数)。怎么给这个构造函数一个方法呢?
delegate int TestDelegate();
public static int Number()
{
return 1;
}
public void Show()
{
TestDelegate test = new TestDelegate(Number);
int i = test();
}
Action与Func
Action,方法没有返回值,使用Action,或Action<>
public void TestAction() {//无参数无返回值 Console.WriteLine("测试Action"); } public void TestAction(int x,int y) {//有参数无返回值 Console.WriteLine($"测试Action{x}+{y}"); } public void Show() { { Action action = TestAction; action.Invoke(); } { Action<int,int> action = TestAction; action.Invoke(1,2); } }
Func,方法有返回值,则是用Func,或者Func<>
public string TestFunc() {//只返回值 return "测试Func"; } public string TestFunc(string str) {//有参数有返回值 return "测试Func" + str; } public void Show() { { Func<string> func = TestFunc; Console.WriteLine(func.Invoke()); } { Func<string,string> func = TestFunc; Console.WriteLine(func.Invoke("string")); } {//Lambda表达式写法 Func<int,string> func = i => { return $"{i}"; }; } }

浙公网安备 33010602011771号