BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

理解和应用F#中的“use”语法

| 作者 Jonathan Allen 关注 594 他的粉丝 ,译者 朱永光 关注 0 他的粉丝 发布于 2007年8月28日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

F#是一个运行在CLR之上的函数式语言。尽管是一个研究性语言,它还是具有几个值得称道的地方,比如是第一个支持泛型的.NET语言。

在最近关于F# 1.9.2的帖子中,Don Syme谈论到了“use”语法。本质上它不是那么有趣,仅仅是提供了对于C#和VB开发人员来说很熟悉的Using结构的支持。实际上,“use”本身并没有比可以在F#中轻易写出的“using”函数强大多少。

作为一个未来可能的增强部分,Don Syme提到“use”语法能运用在类级别的代码中。如果是这样的,那么IDisposable模式将能被编译器自动实现。

在我们继续讲解之前,让我们花点时间来看看IDisposable模式。下面的代码是随Visual Basic一起发布的代码片段。

Class ResourceClass
Implements IDisposable

Private disposed As Boolean = False ' To detect redundant calls

' IDisposable
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
' Free other state (managed objects).
End If
' Free your own state (unmanaged objects).
' Set large fields to null.
End If
Me.disposed = True
End Sub

#Region " IDisposable Support "
' This code added by Visual Basic to correctly implement the disposable pattern.
Public Sub Dispose() Implements IDisposable.Dispose
' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
Dispose(True)
GC.SuppressFinalize(Me)
End Sub

Protected Overrides Sub Finalize()
' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
Dispose(False)
MyBase.Finalize()
End Sub
#End Region

End Class

正如你看到的,有太多额外的东西需要写。就算类没有包含任何非托管资源,允许去除Finalize方法,还是需要写很多东西。到最后,依旧还有缺陷,因为没有错误处理代码,这会是按照这种方法编写代码遇到的一个主要问题。

这就是真正能感受到研究性语言带来的影响所在。通过把F#的这个想法运用到VB和C#中,我们将能把所有的这些八股代码简化为一个单独的方法,以便自动处理非托管对象。

查看英文原文:The "use" Binding In F# and How It Should Be Applied To C# and VB

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT