代理是一种特殊的,指向某个方法模块所在的地址。一般来讲,那个方法模块,能够是一个普通的方法,很多其它的时候,是一团匿名的lamda表达式,即一个匿名方法。如今简单理解一下代理的简写方式,即Actionkeyword。
class A { B b = new B(); public delegate string Show(string result); public string Execute() { Show s = new Show(b.MyShow); string str = s.Invoke("ttt"); return str; } } class B { public string MyShow(string s) { return s + ">>>>>>>>>"; } } static void Main(string[] args) { A a = new A(); a.Execute(); }这样,使用A的时候,仅仅改变B中MyShow的代码,就能定制A中Execute的运行结果。具有相同功能的代码,我们用Action类型来完毕。
class C { D d = new D(); Action<string> action; public void Execute() { action = d.MyShow2; action.Invoke("ttt"); } } class D { public void MyShow2(string s) { Console.WriteLine(s + ">>>>>>>>>"); } } static void Main(string[] args) { A a = new A(); a.Execute(); }
这段代码与上边的代码具有相同的效果。能够看出,从本质上讲,就是Action就是delegate的简化模式,就假设lamda表达式来简化匿名方法一样。当匿名方法必需要有返回值的时候,我们使用Fun类型来处理。用法基本上有Action相同,仅仅是对于參数,前几个是传入值,最后一个是返回值。