考虑以下示例F#代码:
type mytype() =
member this.v = new OtherClass()
Run Code Online (Sandbox Code Playgroud)
如果OtherClass实现了IDisposable,那么成员绑定是否像let绑定或use绑定一样?有没有办法让它充当使用绑定?我有一些与此非常相似的代码,我想确保在父对象超出范围时调用Dispose.
通过Expert F#进行的快速扫描未能找到任何明确的内容,但也许我正在寻找书中的错误术语.
在您的代码段中,v每次调用成员时都会评估成员的主体(这意味着OtherClass每次有人使用它时都会创建一个新实例).该成员只返回新创建的对象,您可以像这样使用它:
let m = new MyType()
use v = m.V // 'use' binding
Run Code Online (Sandbox Code Playgroud)
我不确定这是不是你问的问题.如果您只想创建一个实例,则需要编写如下内容:
type MyType() =
let v = new OtherClass()
member this.V = v
Run Code Online (Sandbox Code Playgroud)
这与通常的let绑定相同,并且在v处理当前实例时不会自动处理该值MyType.已经v自动配置,你需要实现IDisposable的MyType明确:
type MyType() =
let v = new OtherClass()
member this.V = v
interface IDisposable with
member x.Dispose() = (v :> IDisposable).Dispose()
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有语法糖可以使它更好(我曾经建议允许use并隐式实现IDisposable类型成员到F#团队,但他们没有实现它
(还是:-))).
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |