f# - 接口自动属性如何在对象表达式中实现
问题描述
在以下示例中,代替 ??? 的是什么:
type IFace =
abstract MyProp : bool with get, set
let createImplementation () =
{ new IFace with
member this.MyProp = ??? }
解决方案
语法有点奇怪。您必须分别定义 getter 和 setter 并将它们分开and
:
let createImplementation () =
{ new IFace with
member this.MyProp
with get() = true
and set x = ()
}
但是当然,这样的属性有点用处,因为 setter 不做任何事情。它没有任何地方可以放置价值。
你如何处理这取决于你的实现应该是什么。一种方法,我能想到的最直接的方法就是为属性声明一个可变存储:
let createImplementation () =
let mutable myProp_Value = true
{ new IFace with
member this.MyProp
with get() = myProp_Value
and set x = myProp_Value <- x
}