NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

软件测试/测试开发丨接口自动化测试,接口鉴权的多种方式

测试人

软件测试

软件测试/测试开发丨接口自动化测试学习笔记,数据库操作与断言

测试人

软件测试

情感语音识别在人机交互中的应用与挑战

来自四九城儿

item_get_app-获得淘宝app商品详情原数据api接口的步骤

技术冰糖葫芦

API 文档

Sketch for mac(矢量绘图软件) 99.1永久激活版

mac

Sketch 苹果mac Windows软件 矢量编辑工具

Redis 桌面管理器:Redis Desktop Manager for Mac激活版下载

iMac小白

代码安全之代码混淆及加固(Android)🔒

软件测试| 教你拿捏Python运算符(三)

霍格沃兹测试开发学社

北大&腾讯打造多模态15边形战士!语言作“纽带”,拳打脚踢各模态,超越Imagebind

Openlab_cosmoplat

软件测试|教你拿捏Python运算符(二)

霍格沃兹测试开发学社

MacOS虚拟定位工具AnyGo永久激活版下载

iMac小白

Bartender for mac(菜单栏图标管理软件) 5.0.44激活版

iMac小白

DeFi和NFT融合:去中心化金融的新领域

区块链软件开发推广运营

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

情感语音识别技术的现状与未来

来自四九城儿

【2023云栖】黄博远:阿里云人工智能平台PAI年度发布

阿里云大数据AI技术

人工智能

区域巡查二维码系统:扫码记录巡查结果,异常情况及时上报

草料二维码

二维码 知识分享 二维码生成 草料二维码 区域巡查

百度搜索智能化算力调控分配方法

百度Geek说

人工智能 深度学习 算法 企业号11月PK榜

腾讯云大数据流计算 Oceanus 在 MySQL CDC Connector 的核心优化

腾讯云大数据

流计算 Oceanus

docker上安装的jenkins容器内访问不了外网

伤感汤姆布利柏

软件测试|教你拿捏Python运算符(一)

霍格沃兹测试开发学社

情感语音识别的技术挑战与解决方案

来自四九城儿

软件测试|数据可视化神器——pyecharts教程(五)

霍格沃兹测试开发学社

Last Week in Milvus

Zilliz

Milvus Zilliz 向量数据库

LTV预测算法从开发到上线,浅谈基于奇点云DataSimba的MLOps实践

奇点云

算法 奇点云 数据研发

软件测试/测试开发丨接口自动化测试学习笔记,加密与解密

测试人

软件测试

Mosaic for Mac(mac多窗口整理) v1.4永久激活版

mac

窗口管理工具 苹果mac Windows软件 MosAIc

OpenAI 上线新功能力捧 RAG,开发者真的不需要向量数据库了?

Zilliz

openai 向量数据库 ChatGPT zillizcloud rag

中国唯一!华为入选Gartner®企业低代码应用平台魔力象限

华为云PaaS服务小智

云计算 低代码 华为云

item_review-获得淘宝商品评论api接口步骤

技术冰糖葫芦

API 文档

特权账号管理之风险检测

尚思卓越

网络安全 特权账号 风险检测

JNPF低代码,发挥软件定制的威力

互联网工科生

软件开发 低代码 开发平台 JNPF

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