写点什么

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

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

关注

评论

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

“服务可达的数据链DNA” ,打通从代码到用户的“任督二脉”

博睿数据

数据链DNA

架构实战营 模块三作业

netspecial

架构实战营

现代电信企业:极低延迟与复杂决策如何兼得?

VoltDB

数据分析 5G 数据平台 低延迟

编程风格漫谈

顿晓

编程风格 5月日更

面试真题:无重复字符的最长子串

看山

面试 算法

网络攻防学习笔记 Day8

穿过生命散发芬芳

5月日更 网络攻防

【HDC.Cloud 2021】边云协同,打通AI最后一公里

华为云原生团队

人工智能 开源 云原生 边缘计算 华为云

关于安卓设备声音远程传输的解决方案

行者AI

云平台

5G+AI,智能视频的下一步怎么走?百度云智技术论坛带你一探究竟!

百度大脑

百度智能云

马丁格尔策略交易软件源码,量化策略系统开发

为何“低代码”频频引发业界热议?

优秀

低代码

纯干货!看了10多篇Thread详解,只有阿里P7大佬的这份才是王者

牛哄哄的java大师

Java Thread

清华博士!教你如何快速了解JVM虚拟机,码农:天才就是不一样

牛哄哄的java大师

Java 虚拟机

组织部干部管理系统开发,智慧党建平台搭建

看完阿里P7技术大牛的JVM知识点总结,竟帮我斩获了3份大厂Offer

飞飞JAva

Java JVM

爬虫实战教程:采集微信公众号文章

前嗅大数据

大数据 爬虫 数据采集 爬虫教程

部署kubernetes v1.17.3 集群

大数据技术指南

5月日更

如何更好地洞察用户需求?

石云升

用户分析 职场经验 5月日更

GitHub星标数超4万的火爆之作——ElasticSearch,你值得拥有!

飞飞JAva

Java

“红黑树”详解丨红黑树的应用场景

Linux服务器开发

后端 红黑树 Linux服务器开发 Linux内核 红黑树应用场景

Power BI中的AI语义分析应用:《辛普森一家》

博文视点Broadview

还在“坚持”吗?|靠谱点评

无量靠谱

杨强教授领衔撰写,国内首本联邦学习实战的权威著作

博文视点Broadview

媒体化战略:数字时代企业如何做好公关与内容营销

博文视点Broadview

打破思维定式(三)

Changing Lin

Jmeter下载与mysql简单操作

InfoQ_Springup

工具软件

如何快速排查发现redis的bigkey?4种方案一次性给到你!

观测云

redis 云计算 云服务

私域流量这件事,古代就有了……

脑极体

手把手图解Git工作原理

Lujohn

git GitHub

【LeetCode】股票的最大利润Java题解

Albert

算法 LeetCode 5月日更

还是说出来吧,反正也不是外人|靠谱点评

无量靠谱

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