• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#匿名委托和匿名方法使用小技巧

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  卷首语:匿名委托实指匿名方法或Lambda表达式。

  昨晚有一个朋友给我出了一个问题:

  在如下代码中,怎样才能输出“Hello World”

1 if(---填入代码---)
2
3  Console.Write("Hello ");
4
5 else
6 {
7   Console.Write("World");
8 }

  当然,他说也可以用Java做,但是只能用一句话搞定。

  因为本人比较喜欢.NET这边,所以首选C#试了一下。

  首先,我们很本能地想到,if-else语句块中只能执行到一个(除了在特定情况下使用线程或者使用“true)else if(^!)^!”来截断判断等等非常规方法)。所以,我们理所当然地想到:必须在执行if条件时将Hello输出。于是,我想到了匿名方法(注:参考http://baike.baidu.com/view/2308725.htm(匿名方法 百度百科)http://baike.baidu.com/view/2761370.htm(匿名委托 百度百科)http://msdn.microsoft.com/zh-cn/library/0yw3tz5k.aspx(匿名方法(C#编程指南)))。

  于是,我编写了如下代码:

 1 using System;
2
3 namespace HelloWorldOutPutTest1
4 {
5 // 定义委托
6 public delegate bool MyDelForTest1();
7
8 public class Test1
9 {
10 private MyDelForTest1 _test1; // 声明委托变量
11
12 public static void Main(string[] args)
13 {
14 // 也可以使用如下写法
15        // if (new Test1() { _test1 = delegate() { Console.Write("Hello "); return false; } }._test1())
16 if (new Test1() { _test1 = new MyDelForTest1(delegate() { Console.Write("Hello "); return false; } ) }._test1())
17 {
18 Console.Write("Hello ");
19 }
20 else
21 {
22 Console.Write("World");
23 }
24 }
25 }
26 }

  熟悉委托的朋友肯定对这种写法不陌生,这种写法是正确的,运用了匿名方法来实现,但是还是没哟一句话解决啊!?

  后来那位朋友告诉我他的写法:

 1 using System;
2
3 namespace HelloWorldOutPutTest2
4 {
5 public class Test2
6 {
7 public static void Main(string[] args)
8 {
9 if (new Func<bool>(() => { Console.Write("Hello "); return false; }).Invoke())
10 {
11 Console.Write("Hello ");
12 }
13 else
14 {
15 Console.Write("World");
16 }
17 }
18 }
19 }

  这下终于搞定了。使用了华丽的代码(注:参考http://technet.microsoft.com/zh-cn/magazine/bb534960(VS.90).aspx(Func<(Of <(TResult>)>) 委托)http://technet.microsoft.com/zh-cn/magazine/bb397687(VS.90).aspx(Lambda 表达式(C# 编程指南)))。

  C#这边OK了,Java如何呢?

  老师给了我们解决方案:

 1 package HelloWorldOutPutTest3;
2
3 public class Test3 {
4
5 public static void main(String[] args) {
6 if(new Test3(){ public boolean test() { System.out.print("Hello ");return false;} }.test()) {
7 System.out.print("Hello ");
8 }
9 else {
10 System.out.println("world");
11 }
12 }
13 }

  看来C#和Java语法差别还是挺大的……


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#动态创建单例类的对象发布时间:2022-07-10
下一篇:
C# 非public的方法和属性的单元测试发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap