写点什么

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

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

关注

评论

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

星闪技术代际领先,低时延、精定位、大带宽引领无线短距通信升级

科技热闻

HR Path扩大爱尔兰英国业务版图

财见

高性能虚拟环境存储解决方案:基于 Xinnor RAID 引擎和 Kioxia PCIe 5.0 驱动器

Sergey Platonov

测试 HPC Performance raid Kiokia

《Operating System Concepts》阅读笔记:p626-p628

codists

操作系统

户外全彩LED显示屏应具备哪些性能?

Dylan

交通 LED 户外LED显示屏 体育 LED屏幕

【征程 6】工具链VP示例中Cmakelists解读

地平线开发者

算法 自动驾驶; 地平线征程6

深入研究:京东店铺所有商品API详解

tbapi

京东API 京东店铺所有商品API 京东店铺商品采集

MSKE铭文,一次正确的选择,足以改变你一生命运!

MSKE铭文

比特币行情 MSKE铭文 马斯克铭文 比特币铭文

《Operating System Concepts》阅读笔记:p606-p625

codists

操作系统

智能游戏开发神器 ,Dimensity Profiler让掉帧、内存飙升问题无所遁形

科技热闻

PIRF430 - Job Interview

Echo!!!

English

从零到一开发 DeepSeek 智能聊天机器人

AI时代的一滴水

Python Chat AI API DeepSeek

VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS Lenovo (联想) 定制版

sysin

esxi

VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS Inspur (浪潮) 定制版

sysin

esxi

ProteinMPNN:基于深度学习的蛋白质序列设计模型

Splendid2025

人工智能、

冲破次元壁!初音未来梦幻联名丨华硕ROG DAY暨2025新品发布会

新消费日报

Arthas profiler(使用async-profiler对应用采样,生成火焰图)

刘大猫

教育 Arthas 大模型 社会科学 人文学科

深入研究:京东商品视频 API 详解

tbapi

京东API 京东商品视频API

IBM收购 Hakkoda Inc.,扩展数据专业能力以推动客户的AI转型

财见

全球移动货币业务取得突破

财见

征程 6 VIO Frame 时间戳介绍

地平线开发者

自动驾驶 算法 地平线征程6

接入DeepSeek API,超详细

AI时代的一滴水

Python AI API DeepSeek

VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS IEIT SYSTEMS (浪潮信息) 定制版

sysin

esxi

2025年最佳的5个找工作AI助手:全面指南

安全乐谷

AI 面试 找工作 实习 agent

如何使用 Grafana 连接 Easyearch

极限实验室

Grafana easysearch

PIRF 429:True or False

Echo!!!

English

VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS NVMe 驱动特殊定制版 (集成驱动版)

sysin

esxi

通义灵码 2.0 | AI程序员 荣耀登场

六月的雨在InfoQ

通义灵码 通义灵码2.0 AI辅助编程 AI代码助手

上千元改一份简历,真的值得吗

安全乐谷

面试 找工作 简历 实习

a16z 最新报告:AI 数字人应用层即将爆发,或将孕育数十亿美金市场丨 Voice Agent 学习笔记

声网

VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS xFusion (超聚变) 定制版

sysin

esxi

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