写点什么

理解和应用 F#中的“use”语法

  • 2007-08-27
  • 本文字数:1356 字

    阅读完需:约 4 分钟

F#是一个运行在 CLR 之上的函数式语言。尽管是一个研究性语言,它还是具有几个值得称道的地方,比如是第一个支持泛型的.NET 语言。

在最近关于F# 1.9.2 的帖子中, Don Syme 谈论到了“use”语法。本质上它不是那么有趣,仅仅是提供了对于 C#和 VB 开发人员来说很熟悉的 Using 结构的支持。实际上,“use”本身并没有比可以在 F#中轻易写出的“using”函数强大多少。

作为一个未来可能的增强部分,Don Syme 提到“use”语法能运用在类级别的代码中。如果是这样的,那么 IDisposable 模式将能被编译器自动实现。

在我们继续讲解之前,让我们花点时间来看看 IDisposable 模式。下面的代码是随 Visual Basic 一起发布的代码片段。

<span size="2"><span>Class</span> ResourceClass<br></br><span>Implements</span> IDisposable<p><span>Private</span> disposed <span>As</span> <span>Boolean</span> = <span>False</span> <span>' To detect redundant calls</span></p><p><span>' IDisposable</span><span>Protected</span> <span>Overridable</span> <span>Sub</span> Dispose(<span>ByVal</span> disposing <span>As</span> <span>Boolean</span>)</p><br></br><span>If</span> <span>Not</span> <span>Me</span>.disposed <span>Then</span><br></br><span>If</span> disposing <span>Then</span><p><span>' Free other state (managed objects).</span><span>End</span> <span>If</span></p><p><span>' Free your own state (unmanaged objects).</span><span>' Set large fields to null.</span><span>End</span> <span>If</span></p><br></br><span>Me</span>.disposed = <span>True</span><br></br><span>End</span> <span>Sub</span><p><span>#Region</span> <span>" IDisposable Support "</span></p><p><span>' This code added by Visual Basic to correctly implement the disposable pattern.</span><span>Public</span> <span>Sub</span> Dispose() <span>Implements</span> IDisposable.Dispose</p><p><span>' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.</span> Dispose(<span>True</span>)</p><br></br> GC.SuppressFinalize(<span>Me</span>)<br></br><span>End</span> <span>Sub</span><p><span>Protected</span> <span>Overrides</span> <span>Sub</span> Finalize()</p><p><span>' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.</span> Dispose(<span>False</span>)</p><br></br><span>MyBase</span>.Finalize()<br></br><span>End</span> <span>Sub</span><p><span>#End Region</span><span>End</span> Class</p></span>正如你看到的,有太多额外的东西需要写。就算类没有包含任何非托管资源,允许去除 Finalize 方法,还是需要写很多东西。到最后,依旧还有缺陷,因为没有错误处理代码,这会是按照这种方法编写代码遇到的一个主要问题。

这就是真正能感受到研究性语言带来的影响所在。通过把 F#的这个想法运用到 VB 和 C#中,我们将能把所有的这些八股代码简化为一个单独的方法,以便自动处理非托管对象。

查看英文原文: The “use” Binding In F# and How It Should Be Applied To C# and VB

2007-08-27 21:511861
用户头像

发布了 254 篇内容, 共 67.7 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

第九周作业

腾志文(清样)

什么是深度强化学习?

华章IT

学习 智能体

日入斗金,稳赚不赔?小心泛滥网络的兼职刷单让你钱尽财空

360安全卫士

微服务架构下的核心话题 (二):微服务架构的设计原则和核心话题

xcbeyond

架构 微服务 设计原则

NIO的组成有哪些——奈学

古月木易

nio

打造高转化率网站不得不遵循的3条规范

姜奋斗

网站架构 网站 网站搭建 高转化率 转化

直播平台在贝壳找房中的实践与运用

Geek_hyrcb9

架构 分层架构 直播 分层思维 多元场景应用

充分释放数据价值:安全、可信6到飞起

华为云开发者联盟

区块链 数据共享 华为云 可信安全计算 数据价值

架构师训练营第九周

WW

环信大学:模型的边界!

环信

NIO的组成有哪些——奈学

奈学教育

nio

计算之美(1/12)

我的偶像是木子

数据结构 算法

百度大脑人脸离线识别SDK升级盘点,Linux ARM版本上线

百度大脑

人工智能 人脸识别 百度大脑 sdk

详解GaussDB(for MySQL)服务:复制策略与可用性分析

华为云开发者联盟

数据 路径 可用性 华为云 GaussDB

英特尔十代酷睿携手机械革命X3-S 纵享顺畅游戏之巅

最新动态

信创舆情一线--工信部开展网络安全技术应用试点示范工作

统小信uos

零基础建网站必备技能,看这一篇就够了

北柯

程序语言 网站搭建 编程网站

女博士年薪156万入职华为!网友:实力演绎美貌与智慧并存

程序员生活志

华为 少年天才

华为云的研究成果又双叒叕被MICCAI收录了!

华为云开发者联盟

学习 AI 计算机视觉 医疗 华为云

如果不懂编程,请看这里!!!

代码制造者

学习 编程 低代码 零代码

为Z3 Air-赋能,十代酷睿引领游戏5GHz新时代!

最新动态

EasyDL的数据集、模型与代码的版本管理:灵活管理效率提升

百度大脑

人工智能 模型训练 百度大脑

影调:光影交响曲

北风

摄影 风光 影调 光影 人像

原创 | 使用JPA实现DDD持久化- O:对象的世界(2/3)

编程道与术

Java hibernate DDD JDBC jpa

当百度遇上新基建:开放是基本原则 做智能时代的赋能者

百度大脑

人工智能 百度 AI 新基建 百度大脑

对于容器技术的看法

倾心煎蛋

中国四大银行正在大规模内测数字货币APP|可凭手机号完成转账

CECBC

数字货币 DCEP 中国人民银行

Week09作业

熊威

如何将FastDFS存储数据平滑迁移至XSKY对象存储?

XSKY星辰天合

【DevOps】Jenkins持续集成流水线(中)

Man

DevOps jenkins CI/CD JACOCO FINDBUG

Gitlab 部署配置

wong

gitlab

理解和应用F#中的“use”语法_.NET_Jonathan Allen_InfoQ精选文章