在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
总结 概括 委托是寻址方法的.NET版本,类似于C++中的指针.委托可以理解为指向函数的指针,它是类型安全的,定义了具体的参数和返回值. 定义一个委托,实际上是定义一个类,委托是对方法的引用,如方法Func,把功能交给委托的类来实现. 委托的作用:结合泛型,可以实现功能上的扩展(如针对整型的函数,可以通过委托指向多种函数,实现类中某个属性的比较).Lambda表达式需要使用委托定义.事件需要使用到委托. Lambda表达式与委托直接相关.Lambda表达式可以理解成一个简单的方法定义(包括参数,返回值),表达式由委托来指向. Lambda表达式的作用,减少代码量 事件,基于委托,为委托提供了一种发布/订阅机制.最直接的就是Button的Click事件.
委托案例: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace ConsoleApplication2 { class Program { //定义一个委托 public delegate double DoubleOp(double x); //定义委托的函数 public static double MultiplyByTwo(double value) { return value * 2; } public static double Square(double value) { return value * value; } static void Main(string[] args) { DoubleOp[] operations = { MultiplyByTwo, Square }; Console.WriteLine(operations[0](2)); Console.WriteLine(operations[1](2)); Console.ReadKey(); } } }
Action<T>委托和Func<T>委托 Action为返回值void的委托,Func为带返回类(最后一个参数为返回类型). //DoubleOp[] operations = { MultiplyByTwo, Square }; Func<double, double>[] operations = { MultiplyByTwo,Square}; //上例中的这两句话可以互换
委托更多的拥簇是作为寒素的参数,可以把符合一定要求(参数,返回值一致)的函数作为参数传入其他函数(是不是和类似指针)
Lambda表达式 案例: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace zongjie { class Program { static void Main(string[] args) { string mid = ",2,"; //有花括号(多条语句的情况)的需要return语句 Func<string, string> lambdaTest = param => { param += mid; param += "3"; return param; }; Console.WriteLine(lambdaTest("1"));
//没有花括号的会隐式添加一条return语句 Func<string, string> oneParam = s => string.Format("change up{0}",s.ToUpper()); Console.WriteLine(oneParam("test")); ; Func<double, double, double> twoParams = (x, y) => x * y; Console.WriteLine(twoParams(3,2)); Func<double, double, double> twoParamsWithTypes = (double x, double y) => x * y; Console.WriteLine(twoParamsWithTypes(4, 2)); ; Console.ReadKey();
} } } |
请发表评论