C#中的委托和Java中的“委托”(Java8 lambda表达式)
Java8中新增了有关对lambda表达式的支持,其本质是一种编译阶段的语法糖,效果是双向的,代码看似简洁的前提下牺牲了部分可读性。
我们可以尝试实现一些有意思的东西,先来看段C#委托(delegate)的代码
namespace Hello
{class Program{static Action<int> callback;static MyDelegate myDelegate;static void Main(string[] args){callback = (int i) => {Console.WriteLine(i);};callback.Invoke(2);myDelegate = (a, b)=> {return a + b;};//myDelegate = add; // C#特有的用法,使得委托具备了类似函数指针的特征int ret = myDelegate.Invoke(1, 2);Console.WriteLine(ret);}static int add(int a, int b){return a + b;}}delegate int MyDelegate(int a, int b);
}
之后是Java的代码:
public class Hello {static IAction<Integer> callback;static MyDelegate myDelegate;public static void main(String[] args){callback = (Integer i) -> {System.out.println(i);};callback.invoke(2);myDelegate = (a,b) -> {return a+b;};//myDelegate = add; // 不支持这种赋值行为int ret = myDelegate.invoke(1,2);System.out.print(ret);}static int add(int a, int b) {return a+b;}
}
public interface IAction<T> {void invoke(T t);
}
public interface MyDelegate {int invoke(int a, int b);
}
对比可以发现,二者何其相似。
其中略微有一点不同,C#中的委托可以直接接受方法赋值(语法糖更为灵活)
由此也不难猜想,C#中的委托本质应该也是某种Object的变种,只不过通过语法糖赋予其类似函数指针,以及更多丰富多变的对象行为,如:BeginInvoke、EndInvoke 等异步行为
C#中的委托和Java中的“委托”(Java8 lambda表达式)相关推荐
- JAVA面试要点006---.net中的委托与java中的代理模式和委托
1.1.1 定义 委托是一种引用方法的类型.一旦为委托分配了方法,委托将与该方法具有完全相同的行为.委托方法的使用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示: //Code in C# ...
- flex array java_Flex中ArrayCollection 与java中的ArrayList互转
Flex中ArrayCollection与java中的ArrayList互转 这里说这是Flex用remoting传一个ArrayCollection到后台(后台也用ArrayCollection接参 ...
- C# 委托 (一)—— 委托、 泛型委托与Lambda表达式
C# 委托 (一)-- 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992 版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此文可 ...
- 委托、Lambda表达式和事件
1. 引用方法 委托是寻址方法的.NET版本.在C++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的.我们无法判断这个指针实际指向什么,像参数和返回类型等项就更无从知晓了.而.NET委托 ...
- [深入学习C#]匿名函数、委托和Lambda表达式
转载自诗人江湖老,原文地址 匿名函数(Anonymous Function)是表示"内联"方法定义的表达式.匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树 ...
- c# python 相互调用_【GhPython】Python如何使用“委托”和lambda表达式
[版权声明] | 作者:月之眼 | 首发于大水牛参数化设计平台 | 如需转载请联系作者 | 如果觉得文章不错,欢迎分享 函数作为参数传入 在python中函数是能作为参数输入函数的.这个有点类似于 ...
- 委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别...
在"实现观察者模式(Observer Pattern)的2种方式"中,曾经通过接口的方式.委托与事件的方式实现过观察者模式.本篇体验使用Action实现此模式,并从中体验委托与事件 ...
- part01.03 委托与 Lambda 表达式(三):Lambda 表达式
"Lambda 表达式"是一个匿名函数,它可以包含表达式和语句,用于创建委托或表达式树类型 A. 用Lambda表达式代替匿名方法,复杂冗长的形式 格式:( 显式类型参数列表 )= ...
- C#委托与Lambda表达式
C#委托与Lambda表达式 一.自定义委托 总结 1.委托必须先声明在使用: 2.委托使用必须实例化,在实例化后要把委托的方法名带入: 3.委托的调用必须与委托的方法参数一致: 二.泛型与多播委托 ...
最新文章
- python编程入门经典实例-总算明了python编程入门经典实例
- 全球及中国油气装备行业投资状况及运营前景研究报告2021版
- 云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)
- 真正的取真实IP地址及利弊Asp.net
- python函数太多_numpy Loadtxt函数似乎消耗了太多内存
- OpenCV+3计算机视觉++Python语言实现+第二版pdf
- 基础知识—函数-默然参数
- 口罩热销卖断货,有的商家却坐地涨价,中国青年报:电商不该借机发疫情财...
- JavaScript 是如何工作的:WebRTC和对等网络的机制!
- 数据结构(一):并查集
- 紫书5-16UVa212
- WINVNC Server详解
- python基本语句实验心得_总算领会python语言学习心得
- 地铁WIFI值28亿?运营商终于不用背锅了
- 第七周学习周报20181022-20181028
- CSS3之正方体旋转
- innodb buffer pool管理--free list
- IDG刘雨坤:关于SaaS业务七点经验
- js用map筛选指定元素(ES6的map方法)
- PhotoShop CC 2017软件整体界面及常规设置
热门文章
- 不做etl sql 怎么直接取_我们可以不再使用ETL了吗?
- ❤️《Vue前端基础框架集合从入门到高级》(小白也可学,建议收藏)❤️
- 圆角边框(HTML、CSS)
- 'React' must be in scope when using JSX react/react-in-jsx-scope报错:
- 江西理工大学c语言考试题库,江西理工大学C语言程序设计竞赛(初级组)(示例代码)...
- Codeforces Round #565 (Div. 3) B. Merge it!
- [翻译]Hystrix wiki–How it Works
- sqlalchemy学习
- 用express搭建网站
- 关于异常的合理处理方式