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

 

posted @ 2012-05-24 11:54  tryfsharp  阅读(246)  评论(0编辑  收藏  举报