F#属性与C#属性

时间:2011-12-28 00:47:47

标签: c# f# properties

在开发F#应用程序时,我的类型包含Lazy<'T>类型的属性。

显然,F#处理属性的语法糖(与C#方式相反)的方式的一个有趣的副作用(原谅双关语)是属性的getter和setter可能返回/接受不同类型。 (至少,当我编写利用这种观察的代码时,Visual Studio并没有抱怨。)

例如,我这样做是有利的:

let lazyValue = lazy 0

member this.Value
    with get () =
        lazyValue.Value
    and set _lazyVal =
        lazyValue <- _lazyVal

...这样,返回 int,但只接受 Lazy<int>

我想知道的是以这种方式做事的理论,惯用和实际的反对意见。这是一个F#势利的人会嗤之以鼻吗?这个(面向对象的实现)明显违反了一些函数式编程经验法则吗?这种方法是否已被证明会在大规模应用中引起问题?如果是这样,为什么/如何?

1 个答案:

答案 0 :(得分:5)

也许这是一个错误,“Visual Studio不会因为[你]编写利用这种观察的代码而抱怨”。见Using F# Option Type in C#

对链接问题的答案中的评论说明:

  

从规范的8.13.1节:如果属性成员同时具有getter和setter,并且两者都不是索引器,那么getter和setter的签名必须表示相同的属性类型