2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

[大厂实践] Netflix 分布式计数器抽象

俞凡

架构 大厂实践

AI如何重塑芯片设计未来

qife122

芯片设计 半导体技术

虚拟机器人如何理解自然语言指令

qife122

人工智能 自然语言处理

哈尔滨二级等保测评实施指南:六大步骤助你高效通过

等保测评

泄漏检测与修复综合管理系统(源码+文档+讲解+演示)

深圳亥时科技

SonarQube Server 2025 Release 4 新增功能简介 - 代码质量、安全与静态分析工具

sysin

SonarQube

Animate.css - 轻松实现网页动画效果

qife122

CSS 前端

单样本学习计算任务的新方法

qife122

机器学习 元学习

逆向工程系列第三篇:二进制分析与破解实战

qife122

逆向工程 IDA Pro

设备端语音处理技术解析

qife122

语音识别 模型压缩

谷歌耗时一月关停服务器间谍软件Catwatchful

qife122

网络安全 数据泄露

南加州大学与某机构共建可信机器学习研究中心

qife122

机器学习 安全算法

监督学习与无监督学习:机器学习技术对比与应用实例

qife122

机器学习 监督学习

低能离子束芯片编辑技术实现高效设计

qife122

芯片设计 硬件优化

视觉语言模型知识蒸馏方法优化

qife122

知识蒸馏 注意力机制

2025年哈尔滨等保测评失败原因剖析:制度、技术与执行的三重挑战

等保测评

哈尔滨三级等保测评技术要求:从主机安全到应用安全的全面防护

等保测评

大数据-59 Kafka 拦截器全解析:原理、拦截链机制与自定义实现实战

武子康

Java 大数据 kafka 分布式 消息队列

“同声传译”还是“全文翻译”?为何HotSpot虚拟机仍要保留解释器?

poemyang

编译原理 Java虚拟机 #java 解释器

攻破天网系统——Real World CTF (2022) 解题实录

qife122

CTF SQL注入

保护通信安全:端到端加密实战指南

qife122

网络安全 signal

VC维度1概念类的差分隐私学习器最优解

qife122

差分隐私 VC维度

javax.security.auth.login.LoginException: Cannot locate KDC

刘大猫

人工智能 数据挖掘 算法 LoginException 算法数据分析

VMware NSX 4.2.3 发布,新增功能概览

sysin

nsx

ROS系统MoveIt玩转双臂机器人系列(三)--利用controller控制实际机器人

芯动大师

ROS

AppAuth-iOS - OAuth 和 OpenID Connect 客户端 SDK

qife122

ios Oauth Authentication

Nexpose 8.16.0 for Linux & Windows - 漏洞扫描

sysin

Nexpose

AWS新工具推荐移除未使用的权限

qife122

AWS 权限管理

计算机图形学在服装定制中的创新应用

qife122

计算机图形学 算法优化

Wire,一个神奇的Go依赖注入神器!

左诗右码

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