关于F#面向对象编程

Dav*_*erk 5 oop f#

我们在f#中创建类的方式存在这种二分法,这真的困扰我.我可以使用隐式格式或显式格式创建类.但是我想要的一些功能只能用于隐式格式,有些只能用于显式格式.

例如:

  1. 我不能在明确定义的类中使用let inline*(或let单独).

  2. 在隐式定义的类中定义不可变公共字段(不是属性*)的唯一方法(我知道)是val bla : bla语法.

    但这里有一个冗余.因为我最终会得到两个相同的不可变数据副本,一个私有,一个公共(因为在隐式模式下,构造函数参数在整个类存在期间持续存在)

  3. (不太相关)使用属性进行方法重载和字段默认值的需求相当不合适.

无论如何我可以解决这个问题吗?

*出于性能原因

编辑:结果我错了两点(感谢Ganesh Sittampalam和MichaelGG).

  1. 虽然我不能let inline在隐式和显式类定义中使用,但我可以使用member inline得很好,我假设做同样的事情.

  2. 显然,使用最新的F#,不再有任何冗余,因为类体中没有使用的任何参数都是构造函数的本地参数.

  3. 在下一个F#版本中消失.

Mic*_*lGG 5

这可能没有帮助,但您可以使成员内联."成员内联私人"工作正常.