开发者社区> aehyok> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C#委托四(匿名方法)

简介: 什么是匿名方法? 匿名方法是C#2.0引入的一个新特性,它允许开发者声明自己的函数代码而无须使用委托函数。 C#为委托提供一种机制,可以为委托定义匿名方法,匿名方法没有名称,编译器会定指定一个名称,匿名方法中不能使用跳转语句跳转到该匿名方法的外部,也不能跳转到该方法的内部。
+关注继续查看

什么是匿名方法?
 
匿名方法是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");

       ///////////////////////////////////////////////////////         
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();
        }

  执行结果为

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C# 委托
一、简介   委托是一种类型,由关键字delegate声明。确切的说,委托是一种可用于封装命名或者匿名方法的引用类型。  它类似于 C++ 中的函数指针,而且是类型安全和可靠的。   委托类型的声明与方法签名相似,有一个返回值和任意数目任意类型的参数。
881 0
委托(一):委托与方法
   一,利用委托将方法作为方法的参数                 首先来看个小例子:               namespace 委托示例2 { /***** * 委托示例一 * 说明:此段程序主要是将委托作为方法的参数传入方法中,使得具体调用时再根据需要为方法赋值。
748 0
c# 委托
c# 委托 类似于C++中的函数指针。
744 0
c# 委托
引用:http://xtuhuajx.blog.163.com/blog/static/25504754200851210120611/ using System;using System.Collections.
597 0
委托
引用:http://baike.baidu.com/view/1935199.htm 引言  委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。
542 0
C#之委托
1、什么是委托    委托可以看成是执行函数的一个东西。   2、如何使用委托?    委托可以像使用一个类一样的来使用它。即先声明,再实例化。    只是有一点不同是,类的实例化后叫做对象或者实例,委托的实例化后仍然叫做委托。
511 0
【C#2.0】发挥匿名委托的威力!
这几天研究了一下Linq,C# 3.0中的“扩展方法”特性为IEnumerable增加了诸如Where、Select等查询方法,这使得“语言集成查询”成为顺其自然的事情。而C#3.0中Linq的实现也是建立在C#2.0的匿名委托的特性之上。
610 0
+关注
aehyok
踏踏实实的做技术,信自己没有什么不可以。
278
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载