F#类中的属性是否会在私有字段中使用双内存?

时间:2017-08-05 01:03:31

标签: class memory f#

F#类具有nice属性,参数自动成为不可变的私有字段。如果我想在外部提供一个这样的字段,我可以在下面的代码中创建一个属性,如I

type MyClass (i: int list) =
    member this.I with get() = i
    member this.foo x = i.Head + x

let mc = MyClass [0..10]
mc.foo 10 // 10
mc.I // [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]

上面代码中的Ii使用的内存量的两倍还是只是一个返回i值的函数?

(当然,这仅在参数使用大量内存时才有意义,而上例中并非如此)

1 个答案:

答案 0 :(得分:6)

否:i被存储为MyClass内的私有字段; MyClass.Iproperty,其get函数返回所述字段的值。

list<'T>是一种引用类型,因此将其保留在类中实际上是一个浅层副本,并且不会复制列表中的数据。