9.5 在 C# 中使用 F# 库

像 C# 一样,F# 也是一种静态类型的语言,就是说,编译器知道每一个值的类型,以及类方法和属性的签名。对于与 C# 的互操作性来说。这是很重要的,由于,编译器能够生成代码。看起来就像普通的 .NET 库。

与其它 .NET 语言的互操作性

F# 和 C# 或 VB.NET 之间的互操作性是很平滑的,相比有 .NET 实现的动态类型的语言。比方 Python、Ruby、JavaScript。这些语言的编译器不知道方法所要求的參数类型。是 int,还是比方Customer,因此,使用 C# 3.0 时,要利用这些语言写的代码是比較困难的。通常,甚至不知道对象是否包括具有特定名字的方法,所以。C# 代码看应该像这样:

obj.InvokeMethod("SayHello", newobject[] { "Tomas" });

这个样例指定方法的名字为一个字符串。并以数组的方式传递參数值给方法。对于很多语言来说,这是一个重要的问题,所以。C# 4.0 引入了动态类型。它同意这样写:

obj.SayHello("Tomas");

obj.SaiHello("Tomas");

这个语法与正常的方法调用同样。但有一个重要的差别。我们还加入还有一个方法调用。但有益用了一个不存在的方法名。这将正确编译,由于方法的名字在内部表示成字符串,就像在前面的样例一样。问题要到执行时间才会发现。F# 是静态类型的事实说明,我们不必操心出现这样的情况:我们能够依靠编译器发现类似的错误,在调用到其它 C# 代码时。

当创建要在 C# 中使用的 F# 库,我们须要区分两种 F# 构造。

第一种包含带成员的类或记录。它就是以标准的 C# 类出现的,使用起来没有不论什么麻烦;另外一种包含值或高阶函数,以非标准方式编译,非常难在 C# 中使用。我们先看一个第一种情况的样例。

最新文章

  1. Android系统的五种数据存储形式(一)
  2. Linux课程实践一:Linux基础实践(基础操作)
  3. 使用PHP获取网站Favicon的方法
  4. 关于js的call()和apply()两个函数的一点个人看法
  5. HTML+CSS编写规范
  6. Groovy选型
  7. css 背景图片拉伸[转]
  8. C++中的函数指针和指针函数
  9. 笔记整理——Linux下C语言正则表达式
  10. jQuery源码学习:Sizzle
  11. python 爬取w3shcool的JQuery的课程并且保存到本地
  12. node.js的安装及配置
  13. RSA算法原理——(3)RSA加解密过程及公式论证
  14. 如何为Rails作贡献:例增加rich_text field generators
  15. SpringBoot内置Tomcat缓存文件目录被意外删除导致异常
  16. [leetcode]256. Paint House粉刷房子(三色可选)
  17. 利用StopWatch类监控Java代码执行时间并分析性能
  18. this.class.getClassLoader().getResourceAsStream与this.class.getResourceAsStream
  19. dp之多维背包hdu2159
  20. php魔术方法__SET __GET

热门文章

  1. SPRING源码分析:IOC容器
  2. Cocos2d-x 3.0rc0版本号项目的创建和部署
  3. Android系统匿名共享内存Ashmem(Anonymous Shared Memory)在进程间共享的原理分析
  4. Docker image 镜像介绍
  5. 基于ADODBX对数据库的CURD
  6. CLR via C# - Char_String
  7. android——仿微拍贷滑动圆形菜单
  8. Fix an “Unapproved Caller” SecurityAgent Message in Mac OS X
  9. Ngui _CD技能特效
  10. 关于DCLP实现的单例模式的一些想法