标签:
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