摘要: F#3.0实现了几个新的功能:Automatically Implemented Property(AIP).这简化了在类型定义里面的属性声明,但不仅仅是这些。基本的AIP是,用更简明的语法,你就能定义一个属性。下面的MyProperty是一个AIP.typeMyType() = classmemberval MyProperty = 0 with get, setend属性MyProperty将被翻译成像下面的东西:typeMyClass() = classvalmutable internalMyProperty@ : intmemberthis.MyProperty with get() 阅读全文
posted @ 2012-05-24 11:54 tryfsharp 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 如果你曾经用一些设计器支持使用过XAML,那么你将额外地受益于设计器所带来的好处。我已经花费了数周,不用实现任何功能和设计器支持的工作。这里描述了一个案例。默认的构造函数是关键!不幸地是,F#里面的record类型没有一个默认的构造函数,这使绑定变得困难。现在我们有CTlMutable来解决这个问题。CTlMutable截屏如下:如果你定义下面的F#代码:[< CLIMutable > ]typeR = {X: int; Y:int }typeR2 = {X: int; Y:int }那么在C#代码里面你能做:varx =new R();varx2 =new R(0, 2);var 阅读全文
posted @ 2012-05-24 11:53 tryfsharp 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 首先,NULL对于F#类型来说是不允许的值,这在某种意义上是好的,但是由此也带来了麻烦。第一个需要可能是:忘记所有关于option和NULL的参数,我需要NULL,那是我编程的方式。那么好。你可以使用你允许它为NULL的类型的[<AllowNullLiteral>]特性。真正走进F#的人们同意使用option是一个更好的选择。然而,这种限制使F#很难和C#程序交流。例如,你想从C#里面使用F#库。你真的能够禁止C#用户设置NULL值进入你的完美世界?或者,你应该吗?我想保持我的世界不受影响且让其他的人继续他们的方式,而不是成为一个编码警察和强迫每个人。我将使用一个属性来筛选传入的N 阅读全文
posted @ 2012-05-24 11:50 tryfsharp 阅读(253) 评论(0) 推荐(0) 编辑