最近我在这里问了一个关于在C#中使用F#扩展的问题.布莱恩引用:
根据语言规范,第10.7节"类型扩展":
可选的扩展成员是静态成员的语法糖.可选扩展成员的使用精心调用具有编码名称的静态成员,其中对象作为第一个参数传递.此版本的F#中未指定名称编码,并且与C#扩展成员的C#编码不兼容.
我想知道在.NET中是否存在任何其他互操作性问题,这些问题限制某些功能对某些语言的使用而不是其他语言的使用?
我希望有很多东西,但是如果你在谈论主要的托管语言(C#,VB,很快就是F#),大多数都是在极端情况下.F#当前与C#交互性差的其他情况是当存在同时采用Action和Func的方法重载时(C#重载决策的工作方式与F#不同,因此对这种API的F#调用可能更加冗长); 'params'参数数组(特别是当试图利用'数组协方差'时,这是C#的一个特征而不是F#的特征); 关于子类化或实现接口有一些问题,结合可访问性(例如公共与内部),有时你无法从C#中派生出一个F#类......
其中许多问题只是F#CTP编译器中的"错误"或F#语言规范的"设计问题",可能会在F#的最终版本发布之前发生变化.
我不太了解CLR尘土飞扬的角落,但我敢打赌,有些地方C#和VB无法啮合.并且有一些主要语言都没有使用CLR的功能,因此我希望有一些方法可以创建有效的IL,这可能会导致某些互操作出现问题.
总的来说,我认为所有这些都是次要的,在F#的情况下,它会在最终版本之前被"修复".但我很想知道人们会提到的其他内容,因为它可能对MS的托管语言团队有用.