在日常使用delegate时,我们通常需要显示声明一个名为XXX的委托,而在使用Action委托时,不必显示定义一个封装无参数过程的委托。
比如正常使用delegate:
1 using System; 2 3 namespace MT 4 { 5 public delegate void ShowValue();//在这里显示声明一个委托 6 7 public class Test 8 { 9 //在这里有一个Test类,类中有一个void的方法,作用是输出一个字符串 10 private string instanceName; 11 public Test(string name) 12 { 13 this.instanceName = name; 14 } 15 public void DisplayToConsole() 16 { 17 Console.WriteLine(this.instanceName); 18 } 19 } 20 21 public class Program 22 { 23 //在Main函数里使用委托去调用这个方法 24 static void Main(string[] args) 25 { 26 Test name = new Test("Sirius"); 27 ShowValue method = name.DisplayToConsole; 28 method(); 29 Console.ReadKey(); 30 } 31 } 32 }
Action就是这么个姿势:
1 static void Main(string[] args) 2 { 3 Test name = new Test("Sirius"); 4 Action method = name.DisplayToConsole; 5 method(); 6 Console.ReadKey(); 7 }
当然,Action也可以有签名模板,Action<T>。
public void DisplayToConsole(string name) { Console.WriteLine(name); }
Action<string> method2 = name.DisplayToConsole; method2("123"); Console.ReadKey();
顺便贴一张MSDN的牛逼图,这是我第一次看MSDN看到想笑……
代码参考:https://msdn.microsoft.com/zh-cn/library/system.action(v=vs.110).aspx
时间: 2024-10-10 08:46:31