繁体   English   中英

F#属性与C#属性

[英]F# properties vs. C# properties

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

显然,F#处理属性的语法糖(与C#方法相反)的方式的一个有趣的副作用(对双关语)是属性的获取器和设置器可能返回/接受不同的类型。 (至少,在我编写利用此观察结果的代码时,Visual Studio并没有抱怨。)

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

let lazyValue = lazy 0

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

...这样Value会返回一个int ,但仅接受 Lazy<int>

我想知道的是以这种方式做事的理论,惯用和实践上的反对。 这是F#势利小人抬起鼻子来的东西吗? 是否有一些明显违反此功能性编程规则(面向对象的实现)? 已经证明这种方法会在大规模应用中引起问题吗? 如果是这样,为什么/如何?

也许这是“ Visual Studio在抱怨您(您)编写利用此观察结果的代码时没有抱怨”的错误。 请参见在C#中使用F#选项类型

链接的问题注释的答案中的注释:

根据规范的第8.13.1节:如果属性成员同时具有getter和setter,但都不是索引器,则getter和setter的签名必须暗示相同的属性类型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM