阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

理解和应用 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:511416
用户头像

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

关注

评论

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

多链铭文聚合协议20Exchange将为Ordi、SATS持仓用户快照空投

EOSdreamer111

AI+无代码助力企业供应链优化

明道云

以太坊 NFT 市场激增:为什么要在 2024 年推出 NFT 市场?

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

AI 技术在前端开发流程中如何应用??3分钟带你一览开放原子开发者大会 OpenTiny 最新资讯!

OpenTiny社区

开源 AI 前端 开放原子

铭文市场火出圈,XRC-20有望继续演绎铭文市场神话

股市老人

【云原生•监控】基于Prometheus的云原生集群监控(理论+实践)-02

Reactor2020

监控 Prometheus kubernetes 运维

【云原生•监控】基于Prometheus的云原生集群监控(理论+实践)-03

Reactor2020

监控 Prometheus kubernetes 运维

文心一言 VS 讯飞星火 VS chatgpt (155)-- 算法导论12.3 2题

福大大架构师每日一题

福大大架构师每日一题

2023 OPPO ColorOS 全球创客大赛收官,见证潘塔纳尔生态日益繁荣

Geek_2d6073

以不竭之动力 深耕人才沃土▕ 软通动力及子公司鸿湖万联共推开源人才培养

新消费日报

铭文市场火出圈,XRC-20有望继续演绎铭文市场神话

BlockChain先知

JVM 小科普:Java 程序背后的老大哥

Java 工程师蔡姬

Java 程序员 JVM 21 天技术人写作行动营

C 语言函数:入门指南

小万哥

c c++ 程序员 后端 软件开发

多链铭文聚合协议20Exchange将为Ordi、SATS持仓用户快照空投

BlockChain先知

多链铭文聚合协议20Exchange将为Ordi、SATS持仓用户快照空投

石头财经

极狐GitLab CI/CD 变量黑魔法之自定义变量

极狐GitLab

DevOps gitlab 变量 CI/CD gitlab ci

从零开始实现Go搜索引擎(二)FST构造算法

geange

Go golang lucene 算法 FST

集成开发之如何用好明道云

明道云

明道云在戴斯克,从业务整合到高效管理的秘诀

明道云

云渲染对高层住宅立面渲染图优势、作用、影响

Renderbus瑞云渲染农场

云渲染 渲染农场 瑞云渲染 动画云渲染 效果图云渲染

50mA、24V、超低 IQ、低压降稳压器

智趣匠

对大模型和AI的认识与思考

AIWeker

AI 总结 大模型 AIGC GPT

2023年11月文章一览

codists

【写作训练营打卡|06】标题对一篇文章起到了什么作用?

多链铭文聚合协议20Exchange将为Ordi、SATS持仓用户快照空投

大瞿科技

【云原生•监控】基于Prometheus的云原生集群监控(理论+实践)-01

Reactor2020

监控 Prometheus kubernetes 运维

降低检索系统搭建门槛,轻松实现 RAG 应用!Zilliz Cloud Pipelines 惊喜上线

Zilliz

Zilliz AIGC zillizcloud rag

铭文市场火出圈,XRC-20有望继续演绎铭文市场神话

石头财经

成功的在线视频流的主要特征是什么?

3DCAT实时渲染

实时云渲染 云流化

包装效果图渲染技巧:怎么用云渲染省钱、省时间

Renderbus瑞云渲染农场

云渲染 云渲染农场 渲染农场

铭文市场火出圈,XRC-20有望继续演绎铭文市场神话

EOSdreamer111

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