写点什么

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

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

关注

评论

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

规避单点故障,MySQL 8.0 MGR软负载怎么选?

dbaplus社群

数据库

12周作业

走走,停停……

大作业二--知识点整理

Nick~毓

HTML02 - 列表

Mr.Cactus

html

甲方日常 80

句子

工作 随笔杂谈

HTML04 - 表单

Mr.Cactus

html

Socket粘包问题的3种解决方案,最后一种最完美!

王磊

Java socket websocket

智慧警务大数据平台开发,数据可视化分析平台搭建

t13823115967

大数据

SRE灵魂之SLI和SLO

勇往直前的胖子

SRE SLO

让你的react代码跑在svelte引擎上

闲鱼技术

NSE交易所系统软件开发|NSE交易所APP开发

系统开发

数据中心大二层网络技术大揭秘

华为云开发者联盟

服务器 数据中心 虚拟化 大二层网络 VLAN

Vue 3 组件开发:搭建基于 Vite 的在线表格编辑系统(组件集成)

葡萄城技术团队

vue.js Vue SpreadJS vite

Spark 3.0 关键新特性回顾

hanke

大数据 spark 开源

HTML03 - 表格

Mr.Cactus

html

冰河开始对Dubbo下手了!

冰河

微服务 dubbo 源码解析 服务治理 RPC调用

三十未立

阿萌

人生修炼

园区能耗监测平台搭建,能源管控系统管理

t13823115967

能源管控

13周作业

走走,停停……

为什么计算机经典大头书老是看不进去?

yes

学习 技术书籍 阅读

第五周 技术选型(一) 学习总结

胡云飞

AWS x 德勤 | “三步走”策略,赋能企业打造洞察驱动型组织

亚马逊云科技 (Amazon Web Services)

云计算 AWS

十三周作业

solike

Go语言分布式系统配置管理实践--go archaius

华为云开发者联盟

分布式 Go 语言

IPFS挖矿APP系统开发|IPFS挖矿软件开发

系统开发

揭开KPI异常检测顶级AI模型面纱

华为云开发者联盟

华为 AI 数据 决策树

mybatis使用及SQL语句优化小结

华为云开发者联盟

数据库 mybatis 索引 实用SQl语句

创业公司用 Serverless,到底香不香?

Serverless Devs

Java Serverless 运维 云原生 大前端

从 RxJS 到 Flink:如何处理数据流?

Apache Flink

flink 流计算

浅谈机器学习模型推理性能优化

张凯峰

人工智能 机器学习

HTML01 - 标签

Mr.Cactus

html

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