C#委托总结 普通委托、泛型委托、匿名委托

  • C#委托总结 普通委托、泛型委托、匿名委托已关闭评论
  • 32 次浏览
  • A+
所属分类:.NET技术
摘要

 一、概念委托的本质也是一种类型,类似于 Class 这样。作用是将一个方法作为参数传递给另一个方法, 关键字是delegate

 

一、概念

委托的本质也是一种类型,类似于Class这样。作用是将一个方法作为参数传递给另一个方法,关键字是delegate

 

二、委托的定义使用步骤

第一步声明委托:

public delegate int myDelegate(int a, int b);

1、声明一个委托类型,可以用访问修饰符修饰publicprivate等,要有delegate关键字,可以有返回值和参数

2、委托所指向的函数必须跟委托具有相同的签名,即相同的参数列表和返回值类型

第二步实例化委托并绑定方法:

myDelegate del1=new myDelegate( toAdd );//只写方法名,不带括号和参数列表

或者:

myDelegate del1 =toAdd;

第三步执行委托:

del1( 3 , 4 );//括号为参数列表

第四步写绑定的方法:

1、方法必须为static静态方法

2、方法必须有和所绑定委托一致的签名,即相同的参数列表和返回值类型

如下:

static public int toAdd(int a, int b)//参数列表与委托定义必须一致

        { 

return a + b;//返回类型与委托定义必须一致

        }

 

三、泛型委托(微软内置委托)

实际上微软已定义好一套泛型委托供我们使用,以免繁琐重复定义,它们分别是ActionFuncPredicate

Action: 此委托绑定的方法不能有返回值,方法可以有至多16个参数;

Func : 此委托绑定的方法可以有返回值。方法可以有至多16个参数;

Predicate: 此委托返回值为布尔型,方法只能又一个参数;

 

四、匿名委托

可以理解为省略了方法定义这步来调用委托。即没有函数名,直接方法体。其中还可以使用lambda表达式来进一步简化代码量和提高执行效率

 

五、委托与线程的关系

委托与线程的关系就是没有关系。很多初学者容易把委托理解为启动新线程的一种方式,实际上他们之间没有关系。比如在主线程里调用开始执行一个委托,则主线程就会进入这个委托进行执行,只到委托中的代码执行完毕再返回主线程继续执行后面的代码。