分享

C#委托四(匿名方法)

 集微笔记 2013-08-12

匿名方法是C#2.0引入的一个新特性,它允许开发者声明自己的函数代码而无须使用委托函数。

C#为委托提供一种机制,可以为委托定义匿名方法,匿名方法没有名称,编译器会定指定一个名称,匿名方法中不能使用跳转语句跳转到该匿名方法的外部,也不能跳转到该方法的内部。也不能在匿名方法外部使用的ref和out参数。

通过使用匿名方法,可以不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。例如,如果创建方法所需的系统开销是不必要的,则指定代码块(而不是委托)可能非常有用。

什么时候该使用匿名方法

1.需要一个临时方法,该方法使用次数极少;

2.这个方法的代码很短,甚至可能比方法声明都短的情况下使用。

下面看一下简单的小例子:

class Program
{

static void MethodTest(string Test)
{
Console.WriteLine(“简单方法执行!”);
}

/// <summary>
/// 声明一个委托,用于实现多播操作
/// </summary>
/// <param name=”Test”></param>
delegate void MyMulticastDelegate(string Test);

static void Main(string[] args)
{
MyMulticastDelegate MyFirst = new MyMulticastDelegate(MethodTest);
MyMulticastDelegate multicastDelegate = MyFirst;
multicastDelegate(“Test”);

/////////////////////////////////////////////////////// <br> string Test = “test”;
MyMulticastDelegate md = new MyMulticastDelegate(
delegate(string Test1)
{
Console.WriteLine(“简单方法执行!”);
}
);
md(Test);
Console.Read();
}
}

通过上面代码可以看到,上面是通过委托实现方法调用的,下面的就是通过匿名方法实现的。

查看执行后的效果:

C#3.0之后匿名方法可以使用λ表达式来进行定义

无论是拉姆达(lambda)表达式(匿名函数、是匿名类) ,都能归属到一种叫闭包的东西上面。

左边是参数,使用括号表达 (string param),可以是 (param)这样不定义类型,编译器会推断出来,只有一个参数的时候可以不使用括号。右边是实现代码,使用花括号,如果代码只有一行,则不使用花括号和return关键字也可以,编译器会为我们添加。

这是λ表达式的简单实现↓

/// <summary>
/// 声明一个委托,用于实现多播操作
/// </summary>
/// <param name=”Test”></param>
delegate string MyMulticastDelegate(string Test);

static void Main(string[] args)
{
string str1 = “Test1″;
string str2 = “Test2″;
MyMulticastDelegate my = param => param str1 str2;
MyMulticastDelegate my2 = (string param) => { return param str1 str2; };
Console.WriteLine(my(“Test”));
Console.WriteLine(my2(“aaaa”));
Console.Read();
}

执行结果为

Tags:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多