查询企业信息的网站,网站建设saas排名,微信公众号外包,网页打不开怎么解决手机委托 委托是一种数据类型#xff0c;可以声明委托类型变量。 委托是一种可以指向方法的数据类型。 声明委托的方式:delegate返回值类型 委托类型名(参数) 比如 delegate void MyDel(int n) 注意这里的除了前面的delegate#xff0c;剩下部分和声明一个函数一样#…委托 委托是一种数据类型可以声明委托类型变量。 委托是一种可以指向方法的数据类型。 声明委托的方式:delegate返回值类型 委托类型名(参数) 比如 delegate void MyDel(int n) 注意这里的除了前面的delegate剩下部分和声明一个函数一样但是Mydel不是函数名而是委托类型名 如何创建委托类型的对象 MyDel sp new Mydel (SayHello) //SayHello需要和MyDel的参数返回值一样 sp这个委托变量就指向SayHello这个方法。 注意不要写成new Mydel (SayHello())因为加上()就是调用方法了 简化的方法MyDel sp SayHello;//编译器会给搞成new Mydel (SayHello)反编译看看。 注意不要写成MyDel sp SayHello(); 委托的使用委托变量之间可以互相赋值就是一个传递指向方法的过程sp()就是调用指向的方法如果有参数就传递参数。 委托是一种指向方法的数据类型。 声明的语法delegate int MyDel2(int i,string s); MyDel2是一个数据类型 可以声明一个变量指向和他类型相容的方法 public delegate void MyDel(int n); static void M1(int a) { Console.WriteLine(M1a); } MyDel d1 new MyDel(M1);//声明MyDel类型的变量指向一个指向M1方法的对象 //上面的代码也可以简化成MyDel d1 M1; 不要把 MyDel d1 new MyDel(M1); MyDel d1 M1; 声明成 MyDel d1 new MyDel(M1()); MyDel d1 M1(); 因为加上括号就代表调用方法了 拿到一个委托变量的时候MyDel d1 M1; 加上括号就代表“执行指向的方法”参数该怎么传递怎么传递 委托是引用类型 可以为null如果委托变量是null那么如果调用的话就会抛出NullReferenceException Func、Action .Net中内置两个泛型委托Func、Action在“对象浏览器”的mscorlib的System下 日常开发中基本不用自定义委托类型了。 Func是有返回值的委托 Action是没有返回值的委托 试验一下用Func、 Action代替之前的委托 匿名方法 使用Delegate的时候很多时候没必要使用一个普通的方法因为这个方法只有这个Delegate会用并且只用一次这时候使用匿名方法最合适。 匿名方法就是没有名字的方法。 MyDelegate p delegate(int s){s10;}; 用匿名方法改造MyMax的例子。 lambda表达式 函数式编程在Entity framework编程中用的很多 1、Actionint a1 delegate(int i) { Console.WriteLine(i); }; 可以简化成(读作goes to) 2、Actionint a2 (int i) { Console.WriteLine(i); }; 还可以省略参数类型编译器会自动根据委托类型推断 3、Actionint a3 (i) { Console.WriteLine(i); }; 如果只有一个参数还可以省略参数的小括号多个参数不行 Actionint a4 i { Console.WriteLine(i); }; 4、如果委托有返回值并且方法体只有一行代码这一行代码还是返回值那么就可以连方法的大括号和return都省略 Funcint, int, string f1 delegate(int i, int j) { return 结果是 (i j); }; Funcint,int,string f2 (i,j)结果是(ij); 5、普通匿名类型也是一样用lambda表达式 委托深入 集合常用扩展方法 Where支持委托、Select支持委托、Max、Min、OrderBy First获取第一个如果一个都没有则异常 FirstOrDefault获取第一个如果一个都没有则返回默认值 Single 获取唯一一个如果没有或者有多个则异常 SingleOrDefault 获取唯一一个如果没有则返回默认值如果有多个则异常 关于orderby、关于where的深入分析 ToList、ToArray 委托的组合 委托对象可以“相加”调用组合后的新委托对象会依次调用被组合起来的委托MyDel m5 m1m2m3; 组合的委托必须是同一个委托类型 (*)委托的“-”则是从组合委托中把委托移除 (*)委托如果有返回值则有一些特殊。 委托的组合一般是给事件用的用普通的委托的时候很少用 事件 案例:定一个Person类定一个监听年龄变化的事件当本命年的时候祝贺一下。 触发事件的地方要判断一下是不是事件null 事件语法event Mydelegate mdl; 加了event关键字实现事件机制的好处 用了event事件不可以修改事件已经注册的值不可以冒充进行事件通知了。只能、- 委托与事件总结 委托的作用 占位在不知道将来要执行的方法的具体代码时可以先用一个委托变量来代替方法调用委托的返回值参数列表要确定。在实际调用之前需要为委托赋值,否则为null。 事件的作用 事件的作用与委托变量一样只是功能上比委托变量有更多的限制。 比如1.只能通过或-来绑定方法事件处理程序2.只能在类内部调用触发事件。 面试题事件和委托的关系事件由一个私有的委托变量和add_***和remove_***方法组成 事件的非简化写法声明一个私有的委托变量和add、remove方法。 委托和事件的区别和关系 错误的说法“事件是一种特殊的委托” 委托用的比较多事件只有开发WinForm、WPF的时候用的才比较多而WinForm、WPF则不是学习重点。掌握“事件和语法”、“委托和事件的关系和区别面试题”即可。 事件监听的代码的快速生成WinForm中的事件简单分析谁调用的Onclick方法 事件、索引器、属性本质上都是方法。面试题接口中可以定义什么接口中只可以定义方法。接口中也可以定义“事件、索引器、属性”因为他们本质上也都是方法。转载于:https://www.cnblogs.com/wjs5943283/p/9401046.html