Uwaga: to pytanie to , a nie to samo, co pytanie: this.Składnia inicjalizacji obiektu C# w języku F #
Niedawno natknąłem jakiś C# składni ja wcześniej nie spotkałem:
Czy istnieje jakiś sposób, aby to zrobić w 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" }};
(zauważ inicjalizacji TwoProperty
w inicjalizatorze gdy seter jest prywatny - to jest ustawienie właściwości na obiekt przechowywany w TwoProperty
, ale NIE przechowywania nową instancję Two
w nieruchomości)
Edit: niedawno natknąłem niektórych kodu C# w konstruktorze w MonoTouch tak:
nameLabel = new UILabel {
TextColor = UIColor.White,
Layer = {
ShadowRadius = 3,
ShadowColor = UIColor.Black.CGColor,
ShadowOffset = new System.Drawing.SizeF(0,1f),
ShadowOpacity = .5f
}
};
najlepszą F # translati na mogłem wymyślić było coś takiego:
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
To nie jest straszny, ale ma więcej hałasu z wielokrotnym layer
referencyjnej powiększonej o jego bardziej konieczne i mniej deklaratywne.
Pokaż nam, co wypróbowałeś do tej pory. Co było dla ciebie trudne? –
@EricLippert Zaktualizowano – mydogisbox
Czy jest to udokumentowana funkcja C#? Umożliwienie wywołania prywatnego setera w tym kontekście wydaje się być błędem. – Daniel