(每日心得)关于C#中委托和事件的一些认识(二)

委托的匿名方法:

委托是一个引用类型,就像对类的使用需要实例化一个对象,那么委托的使用建立在已经对委托进行了实例化,当然委托的实例化需要传递一个与委托签名相同的一个方法。很多时候可能并没有一个合适的初始化方法。这种情况很常见,比如一家汽车公司新成立。那么可能他还没有客户,但是如果他有了新车型,他一样可以向用户发布,只是发布不会有用户响应。因为他还没有用户。那么调用委托时,委托中无任何响应代码显然并不合理。编译器会报错。但是我们的程序应该是自由的,应该在任何时间可以做任何事情。不能受一些外界因素的干扰,那么委托的匿名方法在这时就显得尤为重要了。如下代码所示:

现在并没有加入用户代码,但是程序还是能正确运行,运行结果如下

但是如果我们既没有用户,又没有匿名方法时,那么程序就会报错,无法运行。这不是我们想要看到的,因为从程序员的角度出发,我们应该能保证代码在任何情况下正常运行,而不是让用户循规蹈矩的使用。

但是作为匿名方法他只是用来作为一个始终响应委托调用的一个方法,所以不应加入过多的提示信息,否者当有用户加入时仍然输出例如"现在没有用户"之类的提示信息,未免显得有些不合时宜。将匿名方法作为工厂的对输出信息的校验(比如由输出信息来判断是否已经向用户发布新车型,或者确认一些发出的新车型的一些说明信息是否准确)也是一个不错的选择。

匿名方法的格式如下:

在对一个委托实例化的时候,我们以delegate(参数表)的形式声明一个匿名方法,其后包含一个{},括号之间是对参数的操作语句。{}之后一定不要忘了加分号结束。而且要注意匿名方法只能用于委托的第一次初始化中,用于其他时候编译器会报错,其中参数表要求与委托参数一致。

也许有人认为上面的方法也实现了使用匿名方法的结果,但是这样已经不再是使用匿名方法,而是使用了类的静态方法。

Lambda表达式:

Lambda就是数学中的那么入字形符号,他是C#高级版本所添加的一个全新的语法。

下面的代码显示对Lambda表达式的使用:

看见没是不是和匿名方法很相似,只是少了delegate并且参数表后多了=>,其中=>之前是要使用的参数,之后则是一个块语句,包含对参数的处理。但是Lambda表达式可以用在任意可以使用委托的地方,而不限于初始化的地方。但是在委托中我也只看到这点区别,因为我实在想不出来委托在除了初始化的时候用Lambda表达式干啥。因为就我观察而言委托大多时候是用于引入外界未知方法。既然使用了Lambda那么就说明我们清楚的知道实现代码,那还用委托干嘛,直接调用函数不就行了。相较于在委托中的使用,我觉得在LINQ语句中使用Lambda表达式更能体现出Lambda表达式的优势。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值