首页 > 解决方案 > 接口自动属性如何在对象表达式中实现

问题描述

在以下示例中,代替 ??? 的是什么:

type IFace =
    abstract MyProp : bool with get, set

let createImplementation () =
    { new IFace with
        member this.MyProp = ??? }

标签: f#

解决方案


语法有点奇怪。您必须分别定义 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
    }

推荐阅读