C#匿名委托和匿名方法使用小技巧
2012-03-24 17:11
585 查看
卷首语:匿名委托实指匿名方法或Lambda表达式。
昨晚有一个朋友给我出了一个问题:
在如下代码中,怎样才能输出“Hello World”
当然,他说也可以用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#编程指南)))。
于是,我编写了如下代码:
熟悉委托的朋友肯定对这种写法不陌生,这种写法是正确的,运用了匿名方法来实现,但是还是没哟一句话解决啊!?
后来那位朋友告诉我他的写法:
这下终于搞定了。使用了华丽的代码(注:参考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如何呢?
老师给了我们解决方案:
看来C#和Java语法差别还是挺大的……
昨晚有一个朋友给我出了一个问题:
在如下代码中,怎样才能输出“Hello World”
if(---填入代码---) { 3 Console.Write("Hello "); } else { Console.Write("World"); }
当然,他说也可以用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#编程指南)))。
于是,我编写了如下代码:
using System; namespace HelloWorldOutPutTest1 { // 定义委托 public delegate bool MyDelForTest1(); public class Test1 { private MyDelForTest1 _test1; // 声明委托变量 public static void Main(string[] args) { // 也可以使用如下写法 // if (new Test1() { _test1 = delegate() { Console.Write("Hello "); return false; } }._test1()) if (new Test1() { _test1 = new MyDelForTest1(delegate() { Console.Write("Hello "); return false; } ) }._test1()) { Console.Write("Hello "); } else { Console.Write("World"); } } } }
熟悉委托的朋友肯定对这种写法不陌生,这种写法是正确的,运用了匿名方法来实现,但是还是没哟一句话解决啊!?
后来那位朋友告诉我他的写法:
using System; namespace HelloWorldOutPutTest2 { public class Test2 { public static void Main(string[] args) { if (new Func<bool>(() => { Console.Write("Hello "); return false; }).Invoke()) { Console.Write("Hello "); } else { Console.Write("World"); } } } }
这下终于搞定了。使用了华丽的代码(注:参考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如何呢?
老师给了我们解决方案:
package HelloWorldOutPutTest3; public class Test3 { public static void main(String[] args) { if(new Test3(){ public boolean test() { System.out.print("Hello ");return false;} }.test()) { System.out.print("Hello "); } else { System.out.println("world"); } } }
看来C#和Java语法差别还是挺大的……
相关文章推荐
- c#打包文件解压缩 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法 一个简单例子理解C#的协变和逆变 对于过长字符串的大小比对
- C#中使用委托表达式与匿名方法实现委托方法
- C#,Java匿名方法使用小技巧
- 编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]
- C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法
- C# 匿名方法和拉姆达表达式 (2012-04-27 23:27:15)转载▼ 标签: 杂谈 匿名方法本质上是一传递给委托的代码块,是使用委托的另一种方法。 规则: 1、匿名方法中不能使用跳转语句跳
- C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法
- C#匿名委托和Java匿名局部内部类使用方法示例
- 编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]
- C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法
- C#基础精华07(委托事件,委托的使用,匿名方法)
- C#基础精华07(委托事件,委托的使用,匿名方法)
- C# 委托:把方法组合到一个数组中使用
- c#匿名方法调用委托
- 带有命名方法的委托与带有匿名方法的委托(C# 编程指南)
- 一起谈.NET技术,C#中的委托,匿名方法和Lambda表达式
- dhl:C#异步方法调用(使用委托,在委托上调用BeginInvoke方法)
- C#的委托,匿名方法和Lambda表达式
- 带有命名方法的委托与带有匿名方法的委托(C# 编程指南)
- C#中的委托,匿名方法和Lambda表达式