写点什么

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

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

关注

评论

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

【YashanDB数据库】YashanDB如何回收表空间

YashanDB

yashandb 崖山数据库 崖山DB

云桌面的技术优势

青椒云云电脑

云桌面 云桌面厂家

移动图形工作站:适合3D建模和渲染的设备推荐

青椒云云电脑

图形工作站 移动图形工作站

终身受益的AI自动化创收计划

测试人

FLUX:AI 图像生成的新王者;VideoDoodles:在视频中添加手绘涂擦动画丨 RTE 开发者日报

RTE开发者社区

打造垂直领域内容的问答机器人

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

测试

SD-WAN在海外网络加速中的优势

Ogcloud

网络加速 SD-WAN SD-WAN组网 海外网络加速 SDWAN

思码逸联合信通院共同发布:《研发效能基准报告》

思码逸研发效能

DevOps 研发效能 基线

一文带你深度解析MySQL 8.0事务提交原理

华为云开发者联盟

数据库 企业号 8 月 PK 榜 企业号2024年8月PK榜

云桌面知识最强科普

青椒云云电脑

云桌面 云桌面系统

Prometheus 标签全揭秘:从数据源到仪表盘

腾讯云可观测平台

StarRocks 存算分离 Data Cache 二三事

Ding_Kai

数据库 数据仓库 StarRocks

受邀参加 2024 中国操作系统产业大会 星辰天合获“最优协同奖”

XSKY星辰天合

麒麟软件 软件定义存储 星辰天合

人工智能丨打造企业专属人工智能助理

测试人

软件测试

大模型在资源全生命周期的应用探索

鲸品堂

大模型 生命周期管理 企业号2024年8月PK榜

云电脑如何根据业务需求调整资源

青椒云云电脑

云电脑 云电脑平台

SD-WAN助力在线教育教学的发展

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

震惊:X突遭DDoS攻击,马斯克与特朗普的访谈推迟40分钟后开始

网络安全服务

服务器 马斯克 DDoS x DDoS 攻击

打造企业专属人工智能助理

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

测试

Solana真假繁荣调查:机器人横行占7成交易,Meme数据下滑严重

区块链软件开发推广运营

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

依旧是原汁原味的马自达 EZ先享官见证马自达百年传承

极客天地

GreptimeDB融资数百万美元; Oracle提供免费长期MySQL

NineData

MySQL 数据库 oracle SQL开发工具 GreptimeDB

桌面虚拟化还需要采购主机吗

青椒云云电脑

桌面虚拟化

虚拟云桌面系统可以部署应用于哪些行业

青椒云云电脑

云桌面 云桌面系统 虚拟云桌面

【YashanDB数据库】yasql登录有特殊字符@导致无法登录

YashanDB

yashandb 崖山数据库 崖山DB

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