请注意:此问题与这个问题不同。
我最近遇到了一些我之前没有遇到过的C#语法:
是否有办法在F#中实现这个?
class Two
{
public string Test { get; set; }
}
class One
{
public One()
{
TwoProperty = new Two();
}
public Two TwoProperty { get; private set; }
}
var test = new One(){ TwoProperty = { Test = "Test String" }};
(请注意,当setter为private时,在初始化器中初始化TwoProperty
- 它是在存储在TwoProperty
中的对象上设置属性,但不是在属性中存储Two
的新实例)
编辑: 最近我在monotouch的构造函数中发现了一些C#代码,就像这样:
nameLabel = new UILabel {
TextColor = UIColor.White,
Layer = {
ShadowRadius = 3,
ShadowColor = UIColor.Black.CGColor,
ShadowOffset = new System.Drawing.SizeF(0,1f),
ShadowOpacity = .5f
}
};
我所能想到的最好的F#翻译大概是这样的:
let nameLabel = new UILabel ( TextColor = UIColor.White )
do let layer = nameLabel.Layer
layer.ShadowRadius <- 3.0f
layer.ShadowColor <- UIColor.Black.CGColor
layer.ShadowOffset <- new System.Drawing.SizeF(0.0f,1.0f)
layer.ShadowOpacity <- 0.5f
这并不糟糕,但是由于重复的layer
引用,它具有更多的噪音,并且更加命令式而不是声明性。