f#属性vs. c#属性
本文关键字:属性 vs | 更新日期: 2023-09-27 18:18:50
在开发f#应用程序时,我有一个包含Lazy<'T>
类型属性的类型。
例如,这样做对我是有利的:
let lazyValue = lazy 0
member this.Value
with get () =
lazyValue.Value
and set _lazyVal =
lazyValue <- _lazyVal
…使得Value 返回一个int
,但只接受一个Lazy<int>
。
我想知道的是这种做法在理论上、习惯上和实践上的反对意见。这是一个f#势利小人会嗤之以鼻的事情吗?这(面向对象实现)是否明显违反了函数式编程的一些经验法则?这种方法是否已经被证明在大规模应用程序中会导致问题?如果有,为什么/怎么做?
也许这是一个"Visual Studio不会抱怨,因为[你]编写的代码利用了这个观察结果"的bug。参见在c#中使用f#选项类型
对链接问题注释的回答的评论:
来自规范第8.13.1节:如果一个属性成员同时具有getter和setter,且两者都不是索引器,那么getter和setter的签名必须暗示相同的属性类型