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

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

' IDisposableProtected 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 RegionEnd Class

\

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

\

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

\

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值