Sturct类型装箱时会遇到的问题

2018-06-17 22:47:30来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

Object在拆箱时会在栈空间生成一个临时变量。所以Struct在使用时尽量将内容都声明为readonly为好

[<Struct>]
type Point=
    val mutable X:double
    val mutable Y:double
    member x.Change(a, b) = 
        x.X <- a
        x.Y <- b
    override x.ToString() =
        sprintf "%A %A" x.X x.Y

let mutable p = Point(X=1., Y=1.)
p.ToString()//out: 1.0 1.0
p.Change(3., 2.)
p.ToString()//out: 3.0 2.0
let o = p :> obj
o.ToString()//out: 3.0 2.0
(o :?> Point).Change(5., 5.)
o.ToString()//no change out: 3.0 2.0

 f# 生成的struct实例默认是只读的 也就是说不加上mutable, Change压根就不起作用。保护的更好一些。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:[.NET] 《Effective C#》快速笔记(二)- .NET 资源托管

下一篇:csharp: DefaultValueAttribute Class