第十四章 兼容性和高级互操作

728 篇文章 1 订阅
86 篇文章 0 订阅
本章节深入探讨F#与其他语言的兼容性和高级互操作,尤其关注如何从F#中调用C#、C++等语言的库,并遵循特定规则以确保库的友好性和兼容性。通过实例演示了如何创建适用于多种.NET语言的F#库,以及在C#中调用F#库的方法。
摘要由CSDN通过智能技术生成

第十四章 兼容性和高级互操作

 

在这一章,我们将学习F# 与其他语言进行互操作所需的内容,不仅包括在.NET 框架内,而且也包括从F# 中使用非托管代码,以及从非托管代码中使用 F#。

 

警告

在本书中,我尽一切努力保证使你只需要了解 F#;然而,在这一章,虽然我一直保持代码对这些语言中的最低需求,但是,如果你知道一点 C#、 C++ 或 .NET Common IL 的内容,对你是有帮助的。

 

 

C# 调用 F# 库

 

在 F# 中可以创建两种类型的库:一种是只在 F# 中使用的库,另一种是可以在任何.NET 语言中使用的库。这是因为 F# 可以用丰富、功能强大的方式利用 . NET 类型系统,因此,有些类型对其他.NET 语言看起来可能有点独特;然而,当从 F# 中来看时,这些类型总是会看起来像他们应该的那样。

因此,虽然可以从任何.NET 语言中使用 F# 中的任何库,但是,如果想使库尽可能的友好,就需要遵守一定的规则。下面就是我总结的一些规则:

• 始终使用符号 .fsi 文件,或者 private和 internal 来隐藏实现的细节,归档客户端需要的应用编程接口

• 避免公开返回元组的函数;

• 如果要将公开一个函数,它接收的参数值是另一个函数,那么,公开值作为委托;

• 不要在应用编程接口中使用联合类型,但是,如果你确实必须使用这些类型,那么,就添加成员,使它们更容易使用;

• 避免返回 F# 列表,相反,应该使用 System.Collections.ObjectModel命名空间下的数组、System.Collections.Generic.IEnumerable,或者更好的是使用集合 和 ReadOnlyCollection;

• 如果可能,把类型定义放在命名空间下,在模块中只放值定义;

• 小心在类和接口中定义的签名,一个小的语法改动,会引起很大的差别。

在以下几节中我将用示例来说明这些。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值