Załóżmy, że istnieje klasa z jednym publicznym konstruktorem, który przyjmuje jeden parametr. Ponadto istnieje wiele publicznych właściwości, które chciałbym ustawić. Jaka byłaby składnia tego w F #? Na przykład w języku C#W języku F #, jaka jest składnia inicjatora obiektu z obowiązkowym parametrem konstruktora?
public class SomeClass
{
public string SomeProperty { get; set; }
public SomeClass(string s)
{ }
}
//And associated usage.
var sc = new SomeClass("") { SomeProperty = "" };
F # I może się to zrobić przy użyciu konstruktora lub property setters, ale nie oba jednocześnie, jak w języku C#. Na przykład poniższe są niepoprawne
Wygląda na to, że czegoś brakuje, ale co?
< edit: Jak podkreślił David, robi to wszystko w F # prac, ale z jakiegoś powodu, przynajmniej dla mnie :), to robi się trudne, gdy klasa do stosowania w F # jest zdefiniowany w DO#. Przykładem takiego jest TopicDescription (aby stworzyć coś na tyle publicznego, jak na przykład). Można napisać, na przykład
let t = new TopicDescription("", IsReadOnly = true)
i odpowiedni błąd kompilator będzie Method 'set_IsReadOnly' is not accessible from this code location
.
Masz rację. Tym, co doprowadziło mnie do zdumienia, jest to, że mój VS nie dodał squiggles kiedy próbowałem w C# '' var td = new TopicDescription ("") {IsReadOnly = true}; ''. Tak więc, właśnie założyłem, że w tym przypadku skompilowałoby się '' TopicDescription'' i kilka innych inicjalizacji klasy C#. Jak głupio byłem! – Veksi