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、匿名方法 不需要使用特定的方法,简化代码,
- host.Opened += delegate(object sender, EventArgs e)
- {
- Console.WriteLine("Service Opened.");
- };
不带参数和返回值的匿名方法,可以被具有任何形式签名的委托所指代,如果有一个重载的方法,参数为两种类型的委托,调用这个方法时如果使用不带参数和返回值的匿名方法会编译错误
- static void Output(IntDelegate id)
- {
- }
- static void Output(StringDelegate sd)
- {
- }
- static void Main(string[] args)
- {
- Output(delegate { });
- }
7、lambda表达式 也是一种匿名方法,(参数列表)=>表达式或语句块,在编写Lambda表达式时,可以忽略参数的类型,因为编译器能够根据上下文直接推断参数的类型,
原文地址:https://www.cnblogs.com/dongzee/p/8881587.html
时间: 2024-10-10 07:00:48