匿名方法

到目前为止,要想使委托工作,方法必须已经存在(即委托通过其调用方法的相同签名定义)。但还有另外一种使用委托的方法:通过匿名方法。匿名方法是用作委托的参数的一段代码。

用匿名方法定义委托的语法与前面的定义并没有区别。但在实例化委托时,就会出现区别。

下面时示例代码:

using System;

namespace 匿名方法
{
    class Program
    {
        static void Main(string[] args)
        {
            string mid = ", middle part";
            Func<string,string> anonDel = delegate(string param){
                param += mid;
                param += " and this was added to the string";
                return param;

            };
            string str = anonDel("demo");
            System.Console.WriteLine("Start of string");
            System.Console.WriteLine($"{str}");
            //Console.WriteLine("Hello World!");
        }
    }
}

Func<string,string>委托接受一个字符串委托,返回一个字符串。anonDel是这种委托类型的变量。不是把方法名赋予这个变量,而是使用一段简单的代码:前面是关键字delegate,后面是一个字符串参数。

可以看出,该代码块使用方法级的字符串变量mid,该变量是在匿名方法的外部定义的,并将其添加到要传递的参数中。接着代码返回该字符串值。在调用委托时,把一个字符串作为参数传递,将返回的的字符串输出到控制台。

使用匿名方法的优点是减少了要编写的代码。不必定义仅由委托使用的方法。在为事件定义委托时,这一点非常明显。这有助于降低代码的复杂性,尤其是在定义了好几个事件时,代码会显得比较简单。使用匿名方法时,代码执行速度并没有加快。编译器仍定义了一个方法,该方法只有一个自动指定的名称,我们不需知道这个名称。

在使用匿名方法时,必须遵循两条规则。在匿名方法中不能使用跳转语句(break,goto 或continue)跳到该匿名方法的外部,反之亦然:匿名方法外部的跳转语句不能跳到该匿名方法的内部。

在匿名方法内部不能访问不安全的代码。另外,也不能访问在匿名方法外部使用的ref和out参数。但可以使用匿名方法外部定义的其他变量。

如果需要用匿名方法多次编写同一个功能,就不要使用匿名方法。此时与复制代码相比,编写一个命名方法比较好,因为该方法只需要编写一次,以后可通过名称引用它。

注意:匿名方法的语法在C#2中引入,在新的程序中,并不需要这个语法,因为lambda表达式提供了相同的功能。还提供了其他功能。但是,在已有的源代码中,许多地方都使用了匿名方法,所以最好了解它。

从C#3.0开始,可以使用lambda表达式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值