写点什么

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

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

关注

评论

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

DDD技术方案落地实践

京东零售技术

后端 DDD 系统架构 开发 提效

分钟级实时数据分析的背后——实时湖仓产品解决方案

袋鼠云数栈

大数据 湖仓一体 实时湖仓

MQTT over QUIC 白皮书:下一代车联网消息传输标准协议

EMQ映云科技

车联网 mqtt QUIC QUIC协议 mqtt broker

EOS系统合约总体介绍

BSN研习社

区块链 EOS

对接50+快递商,快递鸟电子面单API助力商家多平台批量打单发货

快递鸟

快递物流 快递

听GPT 讲Rust源代码--compiler(32)

fliter

听GPT 讲Rust源代码--compiler(34)

fliter

聚道云软件连接器助力某半导体行业公司实现访客管理自动化

聚道云软件连接器

案例分享

爆火《幻兽帕鲁》被指用AI缝合宝可梦,开发者自曝传奇经历:是人类的奇迹

Openlab_cosmoplat

Argo CD 可观测性最佳实践

观测云

ArgoCD

听GPT 讲Rust源代码--compiler(33)

fliter

海外云手机三大优势

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机

以赛促教以赛促学:和鲸赋能暨大经管落实赛训一体,培养应用型数据人才!

ModelWhale

人工智能 大数据 高等教育 暨南大学 以赛促教

万界星空科技注塑行业MES解决方案

万界星空科技

mes 万界星空科技 注塑MES 注塑行业

适用于跨境电商的海外云手机

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机

小游戏选型(二):第三方社交小游戏厂家对比,即构/声网/融云/云信等

音视频开发_AIZ

游戏开发 音视频开发 小游戏 小游戏开发 直播间

智慧工地建设与低代码开发: 优化建筑行业的效率与安全

不在线第一只蜗牛

低代码 项目开发 智慧工地 数智转型

小游戏选型(一):游戏化设计助力直播间互动和营收

音视频开发_AIZ

音视频开发 小游戏 小游戏开发 小游戏运营 直播间

软件测试|从零到一:我的测试开发工程师之路

霍格沃兹测试开发学社

湖仓新范式的造浪者 | StarRocks 2023 年度总结(文末福利)

StarRocks

数据库 StarRocks #数据分析

测试管理| 从零到一:我的测试开发工程师之路

测吧(北京)科技有限公司

测试

10 个值得分享给你前端低代码项目

互联网工科生

低代码

高德地图携手HarmonyOS NEXT,开启智能出行新篇章

极客天地

云手机哪一款好用?

Ogcloud

云手机 海外云手机 云手机海外版 国外云手机

构建以平衡计分卡为框架的全面预算管理体系

智达方通

全面预算管理 平衡计分卡 全面预算管理体系

一次开发,多端部署︱小红书携手HarmonyOS NEXT引领行业新风向

极客天地

您有一份OpenHarmony开发者论坛2023年度总结,请查收~

OpenHarmony开发者

OpenHarmony

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