在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

协会组织如何实现数字化落地应用?

boshi

数字化转型 七日更

第四章作业

Kalman

产品经理 产品经理训练营

快递架构设计

梧桐

【LeetCode】盒子中小球的最大数量

Albert

算法 LeetCode 2月春节不断更

白话Mysql的锁和事务隔离级别!死锁、间隙锁你都知道吗?

Java鱼仔

MySQL 高可用

【Python】给PDF添加水印

AXYZdong

Python 2月春节不断更

2 期架构师训练营 - 第十周作业与总结

云飞扬

架构师训练营第2期

2 期架构师训练营 - 第八周作业与总结

云飞扬

架构师训练营第2期

最新版gradle安装使用简介

程序那些事

Gradle 程序那些事 构建工具 build 打包工具

容器 & 服务:Jenkins本地及docker安装部署

程序员架构进阶

容器 jenkins 七日更 28天写作 2月春节不断更

架构师训练营 4 期 第6周

引花眠

架构师训练营 4 期

2 期架构师训练营 - 第七周作业与总结

云飞扬

架构师训练营第2期

浪潮云洲:从工业互联网实践想开去

工业互联网

物流系统抢单简单设计

DL

2 期架构师训练营 - 第十一周作业与总结

云飞扬

架构师训练营第2期

2 期架构师训练营 - 第六周作业与总结

云飞扬

架构师训练营第2期

图文详解网络基础知识

产品经理训练营--第四周作业

月亮 😝

数组与链表学习总结

Nick

数组 链表 数据结构与算法

5G花式过年指南

脑极体

OpenCV--平移与旋转

IT蜗壳-Tango

七日更 2月春节不断更

MyBatis专栏 - 二级缓存

小马哥

Java mybatis 七日更 2月春节不断更

怀乡恋土的人们

熊斌

学习 2月春节不断更

sql注入竟然把我们的系统搞挂了,怎么办?

苏三说技术

java安全

大作业(二)-知识点

hunk

架构师训练营第2期

尝试从用户的角度思考(PO的姿势)

Bruce Talk

Scrum 敏捷开发 Agile Product Owner

阅读笔记:Python A-Z 技巧

小匚

Python 读书笔记 日常思考

第十一周 安全稳定 作业 「架构师训练营 3 期」

胡云飞

第四章学习总结

Kalman

产品经理 产品经理训练

2 期架构师训练营 - 第九周作业与总结

云飞扬

架构师训练营第2期

《未来呼啸而来》- 技术改变生活

石云升

2月春节不断更 技术改变生活 未来呼啸而来

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