回顾总结C#委托

什么时候用到委托。通常情况下在要给方法传递另外一个方法的时候,委托就起到了作用。因为我们的语法结构不存在直接传方的情况,所以使用委托的意义在于要传递方法,就需要对该方法的具体内容进行封装到一个新的对象类型中去。委托同类一样,它是一个特殊的类。特殊之处就在于普通的类都包含数据,而委托它包含的是一个或者多个方法的地址。委托分四步:1、声明委托类2、创建委托对象3、叠加或剔除委托方法4、执行委托。

通常使用一个普通类之前,要定义它,包括该类中定义的字段和方法。然后实例化类的一个对象。委托也一样,定义委托就是定义了某种具体的类型方法。委托本身是没有委托体“{}”,所以他没有类似类的自定义数据成员(字段、方法等等)。任何定义类的地方都可定义委托,比如一个类的内部,或者任何类的外部,还可以在命名空间中定义顶层对象的委托。创建委托的时候必须初始化,声明委托语法格式:delegate 返回值 委托名<泛型>(参数)返回值 方法名(参数)比如:delegate void voidMyDelegate(int y);委托关键字delegate ,例句中声明了一个委托是voidMyDelegate,委托包含并可执行具有相同签名和返回值类型的有序方法列表。当委托被调用时,它调用列表中的每一个方法。

回顾总结C#委托回顾总结C#委托

除了可以自己定义委托外,.NET也有自带委托。Action<T>和Func<T>委托。Action<T>泛型委托可传多达16中不同的参数类型和一个void的返回类型。没有泛型参数的Action类调用无参数的方法。Action<T>泛型多数是用在调用多个方法的委托中,因为这种包含多个方法的多播委托在调用时,可连续调用多个方法,所以返回值一定要是void类型,如果换作别的类型,最后输出得到的只有委托调用的最后一个方法的结果,Func<T>委托使用方法类似于Action<T>,同样Func<T>委托至多传参个数达16种不同类型还有一

个返回类型,Func<T>可以调用无参但有返回类型的方法。演示例子如下;新建一个MathOperations类包含两个方法,然后在控制台代码层定义新方法对该类进行重写,主方法中调用action委托中的所有方法。

回顾总结C#委托

委托中会用到c#中的匿名方法,匿名方法的参数的范围是“匿名方法块”。匿名方法没有名称,无法在匿名方法块范围外使用ref、out参数。无论该目标对象是在块内部还是外部,在匿名方法块的内外部任何地方使用跳转语句都会报错。一般匿名方法是在需要使用一个不经常调用的临时方法,或者某方法包含的内容极为精简的情况下使用。有了匿名方法,就可以不再去实例化委托。结合Func<T>演示一个匿名方法。

例子中变量在匿名方法的外部定义,然后将参数变量又添加到需要传递的参数中,定义Func<T>T为一个string字符串参数类型,调用该委托时,把字符串当作参数进行传递,最后将返回的字符串在控制台上输出显示。

回顾总结C#委托

这是基本的匿名方法声明调用,我们还可以在匿名方法中使用拉姆达表达式来定义。并且只要有委托参数类型的地方,拉姆达表达式就可以用到。在上面最开始的定义委托的例子中,就已经用到了lambda表达式的格式,mydelegate += m => { Console.WriteLine("{0}thisiis Lambda", m); };使用了表达式中运算符=> ,符号左边的是所需参数,右边就定义通过lambda表达式的方法输出。使用拉姆达表达式,定义参数时只有一个参数情况下,直接写出参数名;当有多个参数被使用,需要用括号存放它们以及各自的参数类型。一般时候,只有在使用lambda表达式过程中需要编译多行代码,就必须结尾定义有返回值。单行代码一条执行语句时,即使不定义Return值,默认也会有返回值。通常为了便于找到都会手动添加。

回顾总结C#委托