F#3.0自动地实现属性
F#3.0实现了几个新的功能:Automatically Implemented Property(AIP).这简化了在类型定义里面的属性声明,但不仅仅是这些。
基本的AIP是,用更简明的语法,你就能定义一个属性。下面的MyProperty是一个AIP.
typeMyType() = class
memberval MyProperty = 0 with get, set
end
属性MyProperty将被翻译成像下面的东西:
typeMyClass() = class
valmutable internalMyProperty@ : int
memberthis.MyProperty with get() = this.MyProperty@
andset(v) = this.MyProperty@ < - v
....
end
从定义来看,你将看到一个back-end字段"MyProperty@"。最后,当调试程序的时候,MyProperty@显示在类定义里面。
这个定义有趣的部分是定义里面的0。它是back-end属性的初始值。如果你想引用一个在类定义外面的值,你可以像这样写:
let mutablea = 10
type MyType() =class
member val MyProperty = awith get, set
end
"a"值成为MyProperty的初始值。这并不意味着MyProperty是"a"的一个包装。
你可以使"a"不可变,代码仍然通过编译并工作。
有两个我必须和AIP放在一起的重要要点:
- back-end字段 "MyProperty@"不用CompilerGenerateAttribute修饰。
- 对象表达式不支持AIP。
原文链接:http://apollo13cn.blogspot.com/2012/03/f-30-automatically-implemented-property.html