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:511941
用户头像

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

关注

评论

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

鸿蒙应用开发从入门到实战(八):ArkTS自定义组件语法

程序员潘Sir

鸿蒙 HarmonyOS

SQL Server到Hive:批处理ETL性能提升30%的实战经验

谷云科技RestCloud

hive ETL SqlServer 数据集成平台 数据库同步

No003:记忆与个性化——AI 应该如何“记住”用户?

lsycang

哈尔滨等保测评流程:从定级到合规的关键之路

等保测评

户外LED屏幕的IP等级是什么?

Dylan

广告 广告业 LED LED display LED屏幕

大数据-100 Spark DStream 转换操作全面总结:map、reduceByKey 到 transform 的实战案例

武子康

Java 大数据 flink spark 分布式

网易伏羲:当算法遇见社交,解码游戏世界的连接密码

网易伏羲

社交网络 网易伏羲 游戏AI 游戏社交

No001:关于智能、进化与超越“模仿”的思考

lsycang

智源研究院黄铁军:2015、2030、2045,AI促进可持续发展

智源研究院

技术干货丨电子制造新突破!Inspire PolyFoam 三大核心工艺新功能,为产品可靠性保驾护航

Altair RapidMiner

人工智能 AI 制造业 仿真 CAE

GitHub 上 Star 数量前 10 的开源项目管理工具

NocoBase

GitHub 开源 项目管理 低代码 项目管理系统

为什么说零代码 ETL 是未来趋势?

谷云科技RestCloud

零代码 数据同步 ETL 数据集成平台

从传统施工到无人化作业,甘肃交通建筑龙头企业的智能化转型实践

网易伏羲

网易伏羲 具身智能 工程机械 网易灵动 无人装载机

PSQLException: ERROR: column “xxxxx“ does not exist

刘大猫

人工智能 机器学习 算法 数据分析 数据分析数据挖掘

内网聊天软件有什么用,企业为什么要选择内网IM?

BeeWorks

即时通讯 IM 私有化部署

小扎豪掷143亿,却换不来AI燃料!数据之争下半场,中国冲出一匹黑马

澳鹏Appen

数据集 数据标注 大模型 数据工程 具身智能

一块好屏的“基因”报告:解码高端OLED背后的品质密码

Alter

程序员工作新趋势已到!担心AI会抢岗位?

秃头小帅oi

「DeepSeek 写给 DeepSeek」栏目启动说明

lsycang

BeeWorks:私有化部署即时通讯,铸就企业数字安全基石

BeeWorks

即时通讯 IM 私有化部署

低代码“批量审批/审批意见”实操攻略,5 分钟上手

引迈信息

跨境电商如何通过海外舆情监测优化本地化策略

沃观Wovision

跨境电商 出海企业 沃观Wovision 舆情监测系统 海外舆情监测

大庆等保测评:完整流程拆解与核心要点梳理

等保测评

设备点检 设备维护经验总结(7)

万里无云万里天

工业 设备维护 工厂运维 设备点检

技术圈的“绯闻女孩”:Gossip是如何把八卦秘密传遍全网的?

poemyang

分布式 分布式系统

No002:共同进化——从用户反馈中构建更智能的未来

lsycang

搜索百科(1):Lucene —— 打开现代搜索世界的第一扇门

极限实验室

搜索引擎 lucene elasticsearch 开源 搜索百科

CST软件如何获得RCS曲线均值

思茂信息

rcs 仿真软件 电磁仿真 CST软件 CST Studio Suite

大型命令行工具的设计技巧-以 docker 和 kubectl 为例

baiyutang

Go 编程

对抗性提示:如何为AI系统注入"语义抗体"

澳鹏Appen

对抗性提示 Adversarial Prompting

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