码迷,mamicode.com
首页 > Windows程序 > 详细

c# delegate action func predicate event 匿名函数 lambda

时间:2018-04-19 13:56:16      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:rgs   host   列表   优点   方法   tag   匹配   alt   重载   

1、delegate
  是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。
  与其它的类不同,delegate类能够拥有一个签名 (signature),并且它只能持有与它的签名相匹配的方法的引用。
  它所实现的功能与C/C++中的函数指针十分相似。它允许你传递一个类A的方法m 给另一个类B的对象,使得类B的对象能够调用这个方法m。但与函数指针相比,delegate有许多函数指针不具备的优点:
  首先,函数指针只能指向静态函 数,而delegate既可以引用静态函数,又可以引用非静态成员函数。在引用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而 且还保存了调用此函数的类实例的引用。
  其次,与函数指针相比,delegate是面向对象、类型安全、可靠的受控(managed)对象。也就是 说,runtime能够保证delegate指向一个有效的方法,你无须担心delegate会指向无效地址或者越界地址。

2、action
  是没有返回值的委托,Action 表示无参,无返回值的委托, Action<int,string> 表示有传入参数int,string无返回值的委托。
3、func
  指有返回值的泛型委托,Func<int> 表示无参,返回值为int的委托,Func<object,string,int> 表示传入参数为object, string 返回值为int的委托。
4、predicate 
  是返回bool型的泛型委托。
5、event
  用来修饰delegate,不加event的委托就是一个普通的委托,可以直接通过委托调用,加了event的委托是一个事件,只能通过类的成员函数调用。
6、匿名方法
  不需要使用特定的方法,简化代码,
  1. host.Opened += delegate(object sender, EventArgs e)   
  2. {   
  3.     Console.WriteLine("Service Opened.");   
  4. };   

  不带参数和返回值的匿名方法,可以被具有任何形式签名的委托所指代,如果有一个重载的方法,参数为两种类型的委托,调用这个方法时如果使用不带参数和返回值的匿名方法会编译错误

  1.  static void Output(IntDelegate id)   
  2.     {   
  3.     }   
  4.   
  5.     static void Output(StringDelegate sd)   
  6.     {   
  7.     }   
  8.   
  9.     static void Main(string[] args)   
  10.     {   
  11.        Output(delegate { });   
  12.     }   
7、lambda表达式
  也是一种匿名方法,(参数列表)=>表达式或语句块,在编写Lambda表达式时,可以忽略参数的类型,因为编译器能够根据上下文直接推断参数的类型,

c# delegate action func predicate event 匿名函数 lambda

标签:rgs   host   列表   优点   方法   tag   匹配   alt   重载   

原文地址:https://www.cnblogs.com/dongzee/p/8881587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!